2017-02-13 6 views
0

ネットワーク使用履歴を取得し、渡される関連データの大きさに応じて動的にyの制限を調整するアニメーショングラフがあります。 y制限値の変化を反映するためにy目盛りラベルを取得するにはどうすればよいですか? blit=Flaseすべてのアップデートがうまくいっても、すべてうまく動作しますが、すべてのチックを更新する必要はありません。では、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を更新し、グラフ化されたデータ更新する必要があります。イルミット(0,6)とy = 3のポイントを持っているとしましょう。次に、最初にグラフの中央にあったポイントを(0,10)に更新して、その下側にある必要がありますか?それは、あなたが達成しようとしていることは少し不明です。 'blit = False'を使用すると、私にとってうまくいくようです。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnestグラフ化されるデータのスケールは、ネットワークの負荷に応じて、毎秒数バイトから毎秒数千に劇的に変化します。 1秒あたり数千にジャンプすると、入力データに適した新しいy範囲に拡大縮小するように制限されます。これにより、1秒あたり数十バイトのデータが作成されます。 – 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 
関連する問題