Pyplot — изменение масштаба оси y после ограничения оси x

#python #matplotlib

#python #matplotlib

Вопрос:

Я пытаюсь отобразить некоторые данные с помощью pyplot, а затем «увеличить» с помощью xlim () ось x. Однако новый график не изменяет масштаб оси y, когда я это делаю — я делаю что-то не так?

Пример — в этом коде диапазон отображения по оси y по-прежнему занимает максимум 20, а не 10.:

 from pylab import *

x = range(20)
y = range(20)

xlim(0,10)
autoscale(enable=True, axis='y', tight=None)
scatter(x,y)
show()
close()
  

Комментарии:

1. (удар) Вы когда-нибудь находили удовлетворительное решение для этого?

2. Нет, никогда не работал над этим.

Ответ №1:

Поймите, что это древний вопрос, но вот как я (беспорядочно) обошел проблему:

  1. используйте .plot() вместо .scatter()
  2. доступ к данным графика позже (даже после того, как где-то будет возвращена цифра) с помощью ax.get_lines()[0].get_xydata()
  3. используйте эти данные для изменения масштаба оси y до xlims

Фрагмент должен работать:

 import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

x = range(20)
y = range(20)

xlims = [0, 10]

ax.set_xlim(xlims)
ax.plot(x, y, marker='.', ls='')

# pull plot data
data = ax.get_lines()[0].get_xydata()

# cut out data in xlims window
data = data[np.logical_and(data[:, 0] >= xlims[0], data[:, 0] <= xlims[1])]

# rescale y
ax.set_ylim(np.min(data[:, 1]), np.max(data[:, 1]))

plt.show()
  

Ответ №2:

Я не знаю, хотя вы могли бы попробовать вручную фильтровать точки с помощью

 scatter([(a,b) for a,b in zip(x,y) if a>0 and a<10])