2017-03-07 4 views
-1

FigureCanvasQTAgg内の散布図を使用したいと考えています。散布図には50,000以上のデータ点があります。ユーザは、ポリゴン内のデータポイントを選択するためにプロット内にポリゴンを描画したいと考えています。私は、マウスのクリックでポイントを設定し、Axis.plot()を使ってそれらを線で接続することによってそれを認識しました。ユーザーがすべての点を設定すると、ポリゴンが描画されます。私が新しいポイントを追加するたびに、FigureCanvasQTAgg.draw()を呼び出して、現在のバージョンのプロットをレンダリングします。散布図には非常に多くのデータがあるため、これは遅いです。 これを高速化する方法はありますか?matplotlibプロットレンダリングをより速く行うにはどうすればいいですか

+0

散布図で描画する前にデータ点を間引く必要があります。デシメーションが不可能な場合は、ユーザーがポリゴンを描画したい領域のみを表示してください。これはあなたのレンダリングをスピードアップするはずです。 – siavashk

+2

[matplotlib "slow"](http://stackoverflow.com/search?q=%5Bmatplotlib%5D+ "slow")と[matplotlib "faster"]について354の質問があります(http://stackoverflow.com/search?q =%5Bmatplotlib%5D + "faster")。誰も助けてくれませんか?その場合、より具体的にして、あなたが何を試みたのか、なぜそれが助けにならなかったのかを教えてください。 – ImportanceOfBeingErnest

+0

なぜ多くのデータポイントが必要ですか?このコードの最終目標は何ですか? –

答えて

0

2つの解決策:

  1. 代わりに、散布図が、hexbinプロットを表示しません。
  2. blittingを使用します。

(ケースで誰かがこの答えの品質について疑問に思う;気質問者がspecifially問題以下のコメントで、この種の構造を求めていること。)

+0

興味深いアイデアですが、私は複数の色を持っています。どのようにそれについて:(私はそれを別々の答えに入れないでください) – Michael

0

は私が散乱を変換しようとすることができますmatplotlibを使用して画像にプロットし、imshowで画像を表示します。

import matplotlib 
matplotlib.use('QT4AGG') 
import matplotlib.pyplot as plt 
import Image # PIL 
from io import BytesIO 
from matplotlib import image 

plt.scatter(xdata, ydata) 
plt.axis('off') 
plt.subplots_adjust(0, 0, 1, 1, 0, 0) 
stream = BytesIO() 
plt.savefig(stream, format='raw') 
pilImage = Image.fromstring('RGBA',size=(640, 480), data = stream.getvalue()) 
plt.imshow(image.pil_to_array(pilImage)) 
関連する問題