Не уверен, может ли matplotlib
сделать это автоматически, но есть несколько попыток:
Использовать ось логарифмического масштабирования, т.е. ax.set_yscale('log')
.Это в некоторой степени уменьшит разницу между обычными и выпадающими точками, но вы все равно увидите все обычные данные, лежащие в нижней части графика.
Вручную измените значение y навыбросы к некоторой не такой уж экстремальной ценности.Позже вы можете показать, что эти точки имеют какое-то значение, вручную установив отображение содержимого оси Y, используя plt.yticks(actual_data_array, what_to_display_array)
Создайте регулярный (достаточно высокий) график, затем выполните обработку изображения позжевырезать среднюю часть изображения.Возможно, есть лучший способ, но один из способов сделать это - plt.savefig
, чтобы сохранить график, matplotlib.image.imread
, чтобы прочитать график и, наконец, обработать его, используя plt.imshow(np.concatenate((image_data[:100], image_data[-100:]), 0))
* 1022.* Вот пример второго метода, о котором я говорил:
import numpy as np
import matplotlib.pyplot as plt
a = np.array(((1, 10), (2, 33), (3, 100000), (4, 17), (5, 45), (6, 8), (7, 950000)), 'f')
# scale the array so that matplotlib can plot it "uniformly"
a[a[:,1]>99999,1] = a[a[:,1]>99999,1] / 20000 + 55
plt.plot(*a.T)
# do the displaying trick
plt.yticks(np.r_[np.linspace(0, 50, 5),
np.linspace(100000/20000+55, 950000/20000+55, 5)],
np.r_[np.linspace(0, 50, 5, dtype='i'),
np.linspace(100000, 950000, 5, dtype='i')])
plt.grid()
Это выглядит так:
