2016-05-17 6 views
0

何千もの行があり、どこに問題があるのか​​わからないので、コードを入力しなくても答えが得られることを期待しています。スクロールしているMATPLOTLIBチャートに一定の間隔を置いてください

基本的に、私はスクロールすることをチャートクラスを作成し、それがリアルタイムで入ってくるように、データを更新しました。複数のy軸、一時停止、垂直値ラインの追加など、多くの機能があります。したがって、多くのLOCがあります。ほぼすべてがかなりうまくいっています。

私は、新しいデータが入ったときに背景をつかんでリセットし、blittingすることでスクロールすることができます。(複数のy軸に対して)各行ごとに別々のサブチャートを持ち、限界値をリセットし、mainサブプロットのみのdraw_artist x軸とy軸

問題は、データがスクロールするにつれて、現在のアスペクトに応じて、x軸の目盛りは、新しいデータが入るたびに間隔を変更し続けることができるということです。つまり、0,2,4,6、 1つの瞬間に8,10,12、次に0,5,10が次の瞬間である。

+0

ここに記載されているソリューションのいずれかを使用すると思います: http://stackoverflow.com/questions/12608788/changing-the-tick-frequency-on-x-or-y-axis-in-matplotlib ?axxaxis.set_major_locator(ticker.MultipleLocator(tick_spacing)) –

+0

あなたが再描画すると、x軸の制限とx軸のティックを明示的に設定することができます。 – gboffi

+0

私はそれが問題であるかもしれないと思います。私はMATPLOTLIBにこれを自動的にさせて、ティックスペーシングを計算するときに範囲以上のものを使うように見えます。 –

答えて

0

いいえ、私はこれに対する解決策を得ました。新しいデータが来るとき、私は次のコードを呼び出すには:

if self.tickSpacing is not None: 
    self.MPLsubPlot.xaxis.set_major_locator(ticker.MultipleLocator(self.tickSpacing)) 
else: 
    self.MPLsubPlot.xaxis.set_major_locator(ticker.AutoLocator()) 

をself.tickSpacingなしに初期化され、ユーザーがマウスのパン/ズームダウン開始するとNoneに設定します。マウスアップ(パン/ズームが完了すると)、次の関数が呼び出された場合:

def _updateSpacing(self): 
    labels = self.MPLsubPlot.xaxis.get_ticklocs() 
    if len(labels) > 1: 
     self.tickSpacing = labels[1] - labels[0] 

これはmatplotlibのは、自動的に初期または変更された側面上の間隔を決定して、明示的に新しいデータに更新時にその値を使用することができます。

関連する問題