2016-08-02 6 views
1

matplotlibはfigure全体を再描画するのではなく、最新の点をfigureに更新することは可能ですか?例えばmatplotlibは最新のポイントのみをFigureに更新できますか?

:これは

initiate: 
fig1 = Figure(figsize = (8.0,8.0),dpi = 100) 
axes1 = fig1.add_subplot(111) 
line1, = axes1.plot([],[],animated = True) 

when new data is coming: 
line1.set_data(new_xarray,new_yarray) 
axes1.draw_artist(line1) 
fig1.canvas.update() 
fig1.canvas.flush_events() 

をプロットダイナミックための最速の方法かもしれないが、これは再描画全体の数字でしょう!それが唯一の軸にこの新しい点(新しいx、new_y)を追加する代わりに、すべてのポイントを再描画します

when new data is coming: 
axes1.draw_only_last_point(new_x,new_y) 
update_the_canvas() 

:私はこれが可能であるかと思いますよ。

そして、あなたがそれを行うためのグラフィックライブラリを知っていれば、答えてください、またはコメントしてください、ありがとうございます!!!!!

本当にありがとうございます。

答えて

0

フィギュア全体を再描画するだけですか?つまり、フィギュアが変更されていない限り、ライン自体を再描画しても問題ありませんか?データはあらかじめ分かっていますか?

これらの質問に対する答えが「はい」の場合は、animate -class for matplotlibを調べる価値があります。データが事前に分かっているが、ポイントを1つずつプロットしている例の1つはthis exampleです。この例では、最新のポイントが現在のx-limの外側にある場合は、Figureが再描画されます。データの範囲を知っている場合は、あらかじめ制限を設定することで回避できます。

また、this answeranimate example listまたはanimate documentationを調べることもできます。

+0

ありがとう、いくつかの方法であなたを助けることを願っています。しかし、私はPyQtSlotと信号をPyQt4で使用しているので、アニメーションクラスは私の状況では機能しません。これは反復可能ではありません。また、コードから、アニメーションクラスが実際に行全体を再描画することがわかります。 – disccip

+0

もう1つの解決策は、ただ1つの点で新しい行を作成し、その点だけdraw_artistを使用することです。私はあなたが望むようにうまくいくかどうかわかりません。あなたが非常に多くのポイントを持っていれば、たくさんのラインが得られ、プロットが遅くなるかもしれません。 – pathoren

+0

素晴らしいアイデア!私はそれが私の状況のた​​めに働くかどうかを見るためにそれを試みます。ありがとう。 – disccip

0

これは私の(これまでの)少しの経験です。
私は数ヶ月前にPython(2.x)とopenCV(2.4.13)をグラフィックライブラリとして開始しました。最初のプロジェクトでは、python用のopenCVはnumpl構造体でmatplotlibと同様に動作していました一緒に働くことができます。

何らかの状態の後にいくつかのピクセルを更新する必要がありました。私はまず、opencvで行列のようなnumpyの2D配列を取得して、画像から私の精緻化を行いました。 トリックです:opencvは主に、入力として画像を、最初にXの幅、次にYを高さとして考えます。 numpyの構造は、心の中で私がイメージ行列A画素ごとに更新され、必要に応じてカラーマップ

import matplotlib as plt 
import cv2 
A = cv2.imread('your_image.png',0) # 0 means grayscale 
# now you loaded an image in a numpy array A 
for every new x,y pixel 
A[y,x] = new pixel intensity value 
plot = plt.imshow(A, 'CMRmap') 
plt.show() 

で再度プロットこれによりX.

前にYで行と列が実際にWICHたいです画像は再び、あなたは色がカラーの画像が3 numpyのアレイによってYでXをしているが、RGBのチャンネルの正しい順序としてmatplotlibの持っていることを覚えておくと作業したい場合は、この

import matplotlib.image as mpimg 
#previous code 
mpimg.imsave("newA.png", A) 

を使用検討し、OpenCVのは、BGRの順で動作します。だから、

C = cv2.imread('colour_reference.png',1) # 1 means BGR 
A[y,x,0] = newRedvalue = C[y,x][2] 
A[y,x,1] = newGreenvalue = C[y,x][1] 
A[y,x,2] = newBluevalue = C[y,x][0] 

私は、これは

関連する問題