2017-02-13 77 views
0

我有一個動畫圖形,可以獲取網絡使用歷史記錄,並根據傳遞的相關數據的大小動態縮放y限制。我如何獲得我的y勾號標籤以反映變化的y限制?一切工作正常,當我設置blit=Flase一切正常更新但我不希望一切都更新每一個滴答,只是y刻度標籤時,y限制改變?那麼如何更新或重繪y標記?如何動態更新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限制改變時,y刻度標籤不會更新,所以圖形線數據在1000年,但y刻度標籤仍然顯示1-100。不過,當我調整窗口的大小時,y標記標籤會更新。所以我想一個解決方案是找到哪個函數被調用來重新繪製窗口調整大小時的軸/刻度標籤? – 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 
相關問題