2011-07-17 7 views
21

で動作するように取得しますPySideのLGPLとプロット機能の両方誰かがこれを動作させる方法や、パッケージやアイデアをプロットする方法を経験したことはありますか?はPySideは私が<a href="http://www.scipy.org/Cookbook/Matplotlib/PySide" rel="noreferrer">example code on the SciPy website</a>を実行しようとしているが、私はこのエラーを取得するmatplotlibの

ありがとうございます。

+1

ここにあるサンプルコードをスキップし、最新のmatplotlib git tipで試してみてください。 https://github.com/matplotlib/matplotlib(さまざまなビルドの依存関係が必要であることに注意してください。これは純粋なPythonではありません)完全なPySideサポートは1か月くらい前にqtバックエンドに追加されましたが、まだリリースで出てくる。あなたが好きだったコードは回避策に過ぎません。 matplotlibの新しいバージョンはpysideを完全にサポートします。 –

答えて

2

あなたはmatplotlibメーリングリストに投稿している可能性があります。しかし、他の誰かが答えを探している場合に備えて。最良の選択肢は、Githubでマスターブランチを使用することですが、Githubバージョンの操作方法がわからない場合、またはPySideでプロットをレンダリングするために次のコードを使用できます。

import numpy as np 
from matplotlib import use 
use('AGG') 
from matplotlib.transforms import Bbox 
from matplotlib.path import Path 
from matplotlib.patches import Rectangle 
from matplotlib.pylab import * 
from PySide import QtCore,QtGui 

rect = Rectangle((-1, -1), 2, 2, facecolor="#aaaaaa") 
gca().add_patch(rect) 
bbox = Bbox.from_bounds(-1, -1, 2, 2) 

for i in range(12): 
    vertices = (np.random.random((4, 2)) - 0.5) * 6.0 
    vertices = np.ma.masked_array(vertices, [[False, False], [True, True], [False, False], [False, False]]) 
    path = Path(vertices) 
    if path.intersects_bbox(bbox): 
     color = 'r' 
    else: 
     color = 'b' 
    plot(vertices[:,0], vertices[:,1], color=color) 

app = QtGui.QApplication(sys.argv) 
gcf().canvas.draw() 

stringBuffer = gcf().canvas.buffer_rgba(0,0) 
l, b, w, h = gcf().bbox.bounds 

qImage = QtGui.QImage(stringBuffer, 
         w, 
         h, 
         QtGui.QImage.Format_ARGB32) 

scene = QtGui.QGraphicsScene() 
view = QtGui.QGraphicsView(scene) 
pixmap = QtGui.QPixmap.fromImage(qImage) 
pixmapItem = QtGui.QGraphicsPixmapItem(pixmap) 
scene.addItem(pixmapItem) 
view.show() 

app.exec_() 
30

あなたが言及例:

http://www.scipy.org/Cookbook/Matplotlib/PySide

作品を、しかし、あなたはPySideの使用を提案する必要があるかもしれません:

... 
matplotlib.use('Qt4Agg') 
matplotlib.rcParams['backend.qt4']='PySide' 
import pylab 
... 
+0

http://www.scipy.org/Cookbook/Matplotlib/PySideの例では、なぜ「インポートファイル」がありますか?この線はうまく動作しません。 – JuanPablo

+2

@JuanPablo Pylabをインポートする必要はありませんが、実際にPylabやPyplotをインポートする前に、できるだけMatplotlibを設定する必要があると思います。suerte! – dsign

5

I持っていた同様の目標(LGPL、可能性を商用利用)、ここで私はそれがうまく動作するようになった。

matplotlibのウィジェット(PyQtは、より詳細な1のためhereを参照)を作成します。私は私のプロットを保持するために空白のウィジェットを作成し、私は、メインウィンドウを__init__とき、私はsetupPlotを呼び出す

import matplotlib 

matplotlib.use('Qt4Agg') 
matplotlib.rcParams['backend.qt4']='PySide' 

from matplotlib.figure import Figure 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 

class MatplotlibWidget(FigureCanvas): 

    def __init__(self, parent=None,xlabel='x',ylabel='y',title='Title'): 
     super(MatplotlibWidget, self).__init__(Figure()) 

     self.setParent(parent) 
     self.figure = Figure() 
     self.canvas = FigureCanvas(self.figure) 
     self.axes = self.figure.add_subplot(111) 

     self.axes.set_xlabel(xlabel) 
     self.axes.set_ylabel(ylabel) 
     self.axes.set_title(title) 

のQt Designerでの:

def setupPlot(self): 
    # create a matplotlib widget 
    self.DataPlot = MatplotlibWidget() 
    # create a layout inside the blank widget and add the matplotlib widget   
    layout = QtGui.QVBoxLayout(self.ui.widget_PlotArea)   
    layout.addWidget(self.DataPlot,1) 

は、それから私は、必要に応じてplotDataPointsを呼び出す:

def plotDataPoints(self,x,y):   
    self.DataPlot.axes.clear() 
    self.DataPlot.axes.plot(x,y,'bo-') 
    self.DataPlot.draw() 

注:これは、毎回(データの形状が変化しているため)プロット全体をクリアして再描画するため、高速ではありません。

関連する問題

 関連する問題