2016-07-19 8 views
0

私はPython matplotlibに新しく、図をループで更新したいと考えています。 これは簡単なテストコードです。私は3秒間に3つのグラフを描画し、毎回異なる傾きで描画したいと考えています。もちろん、私はmatplotlibについてもう少し読むべきであることを知っていますが、何かすばやくする必要があります。以下は間違っていますか?ありがとう!ループ内の図形を更新する

#!/usr/bin/env python 

import matplotlib.pyplot as plt 
import numpy as np 
import time 

def demo(a): 
    y = [xt*a+1 for xt in x] 
    ax.plot(x,y) 

if __name__ == '__main__': 
    plt.ion() 
    fig, ax = plt.subplots() 
    ax.set_ylim([0,15]) 
    x = range(0,5) 
    for a in range(1,4): 
     demo(a) 
     time.sleep(2) 

私はplt.ion()が瞬時に有効になります(ただし、推測)、それは、インタラクティブおよびax.plot(x,y)ますと思いました。 の後にax.plot(x,y)を追加しようとしましたが、アーティストや何かの議論が必要です。また、私はこのエラーメッセージが来ている(Ubuntu 14.04.LTS)。

Xlib: extension "XInputExtension" missing on display ":1.0". 
X Error: BadDrawable (invalid Pixmap or Window parameter) 9 
    Major opcode: 62 (X_CopyArea) 
    Resource id: 0x0 

編集:以下の正しいコードを追加します。 (Estilusのソリューションに基づいている私は、正しいグラフ表示のために少しを変更する。

#!/usr/bin/env python 

import matplotlib.pyplot as plt 
import numpy as np 
import time 

def demo(a): 
    plt.cla() 
    y = [xt*a+1 for xt in x] 
    ax.set_ylim([0,15]) 
    ax.plot(x,y) 

if __name__ == '__main__': 
    plt.ion() 
    fig, ax = plt.subplots() 
    x = range(5) 
    for a in range(1,4): 
     demo(a) 
     plt.pause(3) 
     plt.draw() 
+0

[matplotlibでプロットを更新するにはどうすればいいですか?](0120-17753) –

+0

[複数定義可能MATPLOTLIBでforループを使ってアニメーション化するプロット](0120-1775600/default-multiple-plots-to-be-an-ated-with-a-for-loop-in-matplotlib) – hashcode55

答えて

2

図のキャンバスにプロットを描画します。そうしないと、凍った白い画面が表示されます。次に、図を更新するためにdraw()を使いたいとします。したがって、あなたのコードは次のようになります。

import matplotlib.pyplot as plt 
import numpy as np 
import time 

def demo(a): 
    y = [xt*a+1 for xt in x] 
    ax.plot(x,y) 

if __name__ == '__main__': 
    plt.ion() 
    fig, ax = plt.subplots() 
    ax.set_ylim([0,15]) 
    x = range(0,5) 
    for a in range(1,4): 
     demo(a) 
     plt.pause(3) 
     plt.draw() 

を私は3秒に休止時間を設定していますが、(0.000001のように)たい場合、それはかなり少数である可能性があります。これが助けて欲しい!

+0

こんにちは、これは動作します。私がax.set_ylim([0,15])をdemo()の内部に移動した点を除いて。さもなければ、ylimは正しく設定されていません。ありがとう! –

0

あなたがhow to update a plot in matplotlibを理解しようとしているようだ。

あなたはfig1.canvas.draw()への使用方法を理解するためにこのコードを使用する必要がありますあなたのチャートのデータを更新します。ここでは

fig1 = figure() 

for n in range(30): 

    ## Clear the figure 
    clf() 

    # Do a plot that changes for each iteration 
    plot(range(n)) 

    # Now set the xlimit so that it doesn’t change the plot 
    xlim((0,30)) 
    ylim((0,30)) 

    ## Now the magic, we must update the canvas 
    fig1.canvas.draw() 
0

は動作するコードであるキー行は以下の通りです。

  • plt.cla():各描画間の軸をクリアします。すべてのグラフを保持する場合は、この行を削除します。
  • fig.canvas.draw()は:実際にそうplt.ion()それは、対話型であるためには短時間の間に一時停止する必要が

#!/usr/bin/env python 

import matplotlib.pyplot as plt 
import numpy as np 
import time 

def demo(a): 
    plt.cla() 
    y = [xt*a+1 for xt in x] 
    ax.set_ylim([0,200]) 
    ax.plot(x,y) 
    fig.canvas.draw() 

if __name__ == '__main__': 
    plt.ion() 
    fig, ax = plt.subplots() 
    x = range(5) 
    for a in range(40): 
     demo(a) 
     time.sleep(0.1) 
+0

Iあなたが私に見せたとおりに正確に行いましたが、それは私にこのエラーをもたらします。 (多分Python関連ではない)。数秒後に短い点滅する数字のウィンドウを除いて数字が表示されません。 Xlib:拡張 "XInputExtension"がディスプレイ "1.0"にありません。 Xエラー:BadDrawable(PixmapまたはWindowパラメータが無効)9 メジャーオペコード:62(X_CopyArea) リソースID:0x0 –

+0

@ChanKimこれはPython関連ではありません。あなたのグラフィック環境(仮想マシン?)に問題があります – Frodon

+0

私のCentOS6.7マシンにコードをコピーしましたが、画像ウィンドウは表示されません。スクリプトは数秒後に終了します。何が間違っていますか?あなたの修正されたコードがあなたのマシンで正常に動作していることを確かめますか? –

関連する問題