set_data и autoscale_view matplotlib - PullRequest
       3

set_data и autoscale_view matplotlib

26 голосов
/ 25 августа 2011

У меня есть несколько линий, которые должны быть нарисованы на одних и тех же осях, и каждая из них динамически обновляется (я использую set_data), проблема в том, что я не знаю пределов x и y каждой из линий.И axes.autoscale_view (True, True, True) / axes.set_autoscale_on (True) не делают то, что они должны.Как мне автоматически масштабировать мои оси?

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.add_subplot(111)

axes.set_autoscale_on(True)
axes.autoscale_view(True,True,True)

l1, = axes.plot([0,0.1,0.2],[1,1.1,1.2])
l2, = axes.plot([0,0.1,0.2],[-0.1,0,0.1])

#plt.show() #shows the auto scaled.

l2.set_data([0,0.1,0.2],[-1,-0.9,-0.8])

#axes.set_ylim([-2,2]) #this works, but i cannot afford to do this.  

plt.draw()
plt.show() #does not show auto scaled

Я уже упоминал об этом, это , это .Во всех случаях, с которыми я сталкивался, пределы x, y известны.У меня есть несколько линий на осях, и их диапазоны меняются, отслеживание ymax для всех данных нецелесообразно

Немного изучения привело меня к этому,

xmin,xmax,ymin,ymax = matplotlib.figure.FigureImage.get_extent(FigureImage) 

Нои здесь я не знаю, как получить доступ к FigureImage из экземпляра Figure.

Использование matplotlib 0.99.3

1 Ответ

40 голосов
/ 26 августа 2011

Из документов matplotlib для autoscale_view :

Пределы данных не обновляются автоматически при изменении данных об исполнителе после добавления исполнителя в экземпляр Axes. В этом случае используйте matplotlib.axes.Axes.relim () перед вызовом autoscale_view.

Итак, вам нужно добавить две строки перед вашим plt.draw() вызовом после set_data вызова:

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