2012-03-08 14 views
3

matplotlibの使用についての私の基本的な理解から、あなたは希望のpltをいくつかの 'fig'に保存してから、canvas.draw()操作を使って 'fig'を描くことができます。これが当てはまる場合、私は何の問題もないはずですが、私が行ったことから、正確に何が起こっているのか、キャンバス上に何かを得る背後にある論理は何か。また、最終目標はQtPyウィンドウ内にこのプロットを表示することです。これまでの結果は、私はウィンドウとキャンバスを表示することができますが、キャンバスは空になります。私はhttp://matplotlib.sourceforge.net/users/artists.htmlを見ていて、やっていることが間違っているわけではないと感じていますが、おそらく私はいくつかのニュアンスを見落としています。ここで私が参照しているコードされていますmatplotlibでfigを描くキャンバスを得ることができません

def drawThis(self): 

     self.axes.clear() 
     self.axes.grid(self.grid_cb.isChecked()) 
     self.fig = plt.figure(figsize=(11,7),dpi=self.dpi) 
     file = fileList[selFile] 
     valid = [sColumn] 
     matrix = np.loadtxt(file, skiprows=1, usecols=valid) 
     colCount = np.loadtxt(file, dtype=object) 
     totalCols = colCount.shape[1] 

     kdeData = np.array(matrix) 
     dataRange = (Decimal(max(abs(kdeData)))/10).quantize(1, rounding=ROUND_UP) * 10 

     gkde = stats.gaussian_kde(kdeData) 
     ind = np.linspace(-int(dataRange), int(dataRange), len(kdeData) * sSamples) 
     kdepdf = gkde.evaluate(ind) 

     ##plot histogram of sample 
     plt.hist(kdeData, len(kdeData), normed=1, alpha=0.20) 
     ##plot data generating density 
     plt.plot(ind, stats.norm.pdf(ind), 'r', linewidth=0.8, label='DGP normal') 
     ##plot estimated density 
     plt.plot(ind, kdepdf, 'g', linewidth=0.8, label='kde') 
     plt.title('KDE for '+ str(nameList[selFile])) 
     plt.legend() 

     self.fig.canvas.draw() 

答えて

2

私はmatplotlibの持つ任意の経験を持っていないが、pyplotの使用が正しいかどうか、あなたのコードを見ている中で、私が疑問に思いますか?あなたのコードが私に見える方法は、pyplotを使ってデータを生成することです(戻り値を保持しません)。そしてプロットしますが、実際には軸インスタンス上では動作していないと思います。

matplotlibの使用例は、Segfault using matplotlib with PyQt ..ここで見つけることができます。実際にPyQt4 FigureCanvasを直接作成し、軸インスタンスに直接プロットしています。

メソッドは、使用するインスタンスを指示するためにFigureと軸のパラメータをとることができます。私はあなたの軸を使用していないのだろうかと思っています。

plt.plot(ind, kdepdf, 'g', axis=self.axis, linewidth=0.8, label='kde') 

または、多分あなたはself.axis = plt.axis()を使用してcreatee self.axisを持っていることを確認、あるいは直接、すべてのプロットをやってみてください。docs here

私の推測では、あなたがこのような何かをやってみてくださいですを見に取ります軸のインスタンス?

+0

私は、作成しているウィンドウでグラフをインスタンス化するプロセスを誤解していると思います。実際に私が行っていたことを作成するために、サンプルで見つけたコードの一部を使用しましたが、実際にキャンバスに表示されている「self.axes」ではなく、pltをpltに保存していました。最後に、私がpyplotを使って生成したデータで何もしていないと述べた後、これを実現しました。 – DamianJ

関連する問題