Как matplotlib решает, что отображать, когда размер данных больше оси - PullRequest
1 голос
/ 29 марта 2019

Я строю набор данных, в котором размер массивов данных больше размера фигуры, даже больше, чем разрешение моего экрана. Как показано в приведенном ниже примере, matplotlib прекрасно справляется с обработкой данных. Это только примерный набор данных. Мой настоящий набор данных гораздо более непредсказуем. У меня есть опасения, что могут быть случаи, когда некоторые важные данные не отображаются. Как matplotlib решает, что показывать?

x = np.arange(0, 10000)
y = np.zeros(10000)
for i in range(0, 10000, 100):
    y[i] = x[i]
x_spikes = np.random.choice(x, size=10, replace=False)
y[x_spikes] = 10000 + x[x_spikes]   
plt.plot(x,y);

print(sorted(x_spikes))
[375, 2828, 3494, 6526, 6855, 6902, 6923, 7117, 7831, 9558]

enter image description here

1 Ответ

2 голосов
/ 29 марта 2019

Команда plt.plot создает один или несколько объектов Line2D. Эти строки имеют linewidth. Единица ширины линии - это точки (по умолчанию 1,5 балла).

Независимо от разрешения в пикселях отображаются все данные, данные не теряются.

Что может случиться, если вы сделаете ширину линии очень узкой, функции могут быть потеряны из-за сглаживания. Чтобы этого не происходило, вы всегда можете использовать ширину линии не менее ppi / dpi. То есть 72 / точек на дюйм в случае Matplotlib. По умолчанию dpi равен 100. Так что, если ширина линии больше или равна 0.72 точек, отображаются все точки. (В Juypter часто значение dpi по умолчанию равно 72, следовательно, 72/72 == 1, а ширина линии 1 потребуется.)

Все это относится к строкам. Для гистограмм (где ширина находится в координатах данных) это отличается. Также изображения могут отображать не все данные - хотя imshow имеет аргумент interpolation, позволяющий управлять интерполяционным поведением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...