2016-07-27 7 views
1

Matplotlibを使用して連続関数をプロットする方法がわかりません。私は散布図をプロットする方法を得ましたが、私は連続プロットをしたいと思います。リアルタイムで連続関数を更新する

は、ここに私のコードです:

import matplotlib.pyplot as plt 
from matplotlib.pyplot import autoscale 
import matplotlib.animation as animation 

import numpy 


class MyPlot(): 
    def __init__(self): 
     self.index = 0 
     self.setup() 

    def setup(self): 
     plt.ion() 
     self.fig, self.ax = plt.subplots() 
     self.line = self.ax.plot([],[]) 
     autoscale() 
     plt.show() 
    def anim(self, i): 
     self.line.set_ydata(i) # update the data 
     return self.line, 
    def add(self, val): 
     print self.index, val 
     self.ax.plot(self.index, val) 
     animation.FuncAnimation(self.fig, self.anim, repeat=False) 
     plt.pause(0.05) 
     #if(self.index >= ntests): 
     self.index+=1 

if __name__== "__main__": 
    import time 
    from random import random 
    p = MyPlot() 

    for i in range(100): 
     p.add(random()) 
     time.sleep(0.5) 

これは動作しますが、何も描画しません。しかし、プロット自体がリサイズされます。

+0

可能な重複で見つけることができる(http://stackoverflow.com/questions/10944621/dynamically-updating-plot-in-matplotlib) –

+1

FYI matplotlibの更新可能ですが、プレゼンテーション品質のグラフ用であり、実際にはリアルタイム更新表示用ではありません。あなたはvispy http://vispy.org/ –

+0

@JasonSを見たいかもしれません。通常、問題の解決策を見ることができないことをコメント作成者がカバーしているため、コメントはちょっと吸います。そうではありません。リンクありがとう: –

答えて

2

一度に1つの点だけをプロットする(存在しない)ので、何も表示されません。 self.ax.plotself.ax.scatterに置き換えると、正しくプロットされます。

実際に線が必要な場合は、最後のインデックスと値を追跡して、最後のインデックスと値を現在のインデックスと値を結ぶ線をプロットするだけです。

(追加するには、これらの2行を追加します)

self.ax.plot([self.index-1, self.index], [self.lastval, val]) 
    self.lastval = val 

だけでなく、セットアップにnumpy.nanself.lastvalを初期化ライン()

+0

答えのためのThansk!はい、私が質問で言ったように、私は散布図をプロットする方法を知っています。とにかくプロットがリサイズされるので、私はすでにシングルポイントのことについて考えてきました。私が質問したように、私は連続したプロットが必要です。実際に2つのポイントをどのように接続できますか?ありがとうございました –

+0

は答えを編集しました – honi

+0

それは素晴らしいです!どうもありがとう! –

2

あなたが実際にmatplotlibの中にラインプロットに値を追加することができます。

self.line.set_xdata(numpy.append(self.line.get_xdata(), self.index)) 
self.line.set_ydata(numpy.append(self.line.get_ydata(), val)) 

このようにして、自分で簿記を行う必要はありません。

詳細は[matplotlibの中に動的に更新プロット]のhttps://stackoverflow.com/a/10944967/2988730

関連する問題