2017-02-13 4 views
0

У меня есть анимированный график, который получает историю использования сети и масштабирует y, динамически зависит от величины передаваемых соответствующих данных. Как я могу получить ярлыки ярлыка y, чтобы отразить изменяющиеся пределы y? Все работает нормально, когда я устанавливаю blit=Flase все обновления прекрасно, но я не хочу, чтобы все обновляло каждый тик, только ярлыки y, когда изменяются лимиты y? Итак, как мне просто обновить или перерисовать ярлыки y tick?Как обновить ярлыки меток matplotlib динамически

def resize(self, y_data): 
    cur_max = max(y_data) 
    if cur_max > self.ax.get_ylim()[1]: # if cur_max > upper y limit.. 
     self.ax.set_ylim(-1, cur_max + cur_max * .10) # increase upper y limit to fit cur_max 
     ### update/redraw tick labels? ### 
    if self.ax.get_ylim()[1] * .25 > cur_max > 0: # if 1/4 the upper y limit > cur_max and cur_max > 0... 
     self.ax.set_ylim(-1, cur_max * .50) # set upper y limit 1/2 its current size 
     ### update/redraw tick labels? ### 
+0

При обновлении ylabels, то рентгенографические данные также должны быть обновлены. Предположим, что у вас есть ylimits (0,6) и точка при y = 3. Затем вы обновляете ylimits до (0,10), точка, которая первоначально находилась в середине графика, теперь должна быть в нижней части, правильно? Тем не менее, немного непонятно, чего вы пытаетесь достичь. Использование 'blit = False' кажется мне прекрасным. – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Масштабируемая диаграмма данных резко изменяется от нескольких байтов в секунду до многих тысяч в секунду в зависимости от сетевой нагрузки. Когда он перескакивает до многих тысяч в секунду, он корректирует их, ограничивая масштаб до нового диапазона y, который подходит для входящих данных, тем самым делая предыдущие графические данные, которые были в десятках байтов в секунду несущественными. – HexxNine

+0

@ImportanceOfBeingErnest Графированная линия обновляется отлично с новой шкалой y, эффективно выравнивая линию, где данные были в 10-х годах, и теперь они действительно показывают пики, которые находятся в 1000-х годах. Проблема в том, что ярлыки y tick не обновляются, когда изменяется предел y, поэтому данные с графическими линиями находятся в 1000-х годах, но метки y tick все еще показывают 1-100. Однако, когда я изменяю размер окна, ярлыки y tick обновляются. Поэтому я предполагаю, что решение заключается в том, чтобы найти, какую функцию вызывается, чтобы перерисовать метки оси/метки при изменении размера окна? – HexxNine

ответ

0

Я думаю, что вам нужно, это выбрать подходящий клеща локатор и/или тик форматировщик: функция, которая называется динамически переместить клещей и этикетки, когда пределы оси изменяются.

всех документов можно найти здесь: http://matplotlib.org/api/ticker_api.html

Вы можете использовать предопределенные локаторы (например LinearLocator) или определить собственный локатор, следуя пример ниже:

import matplotlib.pyplot as plt 
from matplotlib import ticker 
import numpy as np 

#- define the data 
x = np.linspace(0., 1., 100) 
y = np.random.randn(len(x)) 

#- plot it 
ax = plt.gca() 
ax.plot(x, y, 'k') 

#- define your own locator based on ticker.LinearLocator 
class MyLocator(ticker.LinearLocator): 
    def tick_values(self, vmin, vmax): 
     "vmin and vmax are the axis limits, return the tick locations here" 
     return [vmin, 0.5 * (vmin + vmax), vmax] 

#- initiate the locator and attach it to the current axis 
ML = MyLocator() 
ax.yaxis.set_major_locator(ML) 

plt.show() 
#- now, play with the zoom to see the y-ticks changing 

 Смежные вопросы

  • Нет связанных вопросов^_^