2016-05-10 6 views
1

私はpython3で4つの異なるグラフ、速度、高さ、座標、角度の4つのグラフをプロットするGUIを作成しようとしています。今はそれぞれのレイアウトで図を描くことができます。しかし、私はどのように各グラフに異なる関数をプロットするのか分かりません。私はプロットするためにランダムに10点を生成する方法を使用しました。このメソッドが呼び出されると、4つのキャンバスに同じグラフがプロットされます。PyQt4の異なるキャンバスに異なるグラフをウィンドウでプロットする方法は?

私は、フィギュア(グラフごとに1つのプロット)にそれぞれ別の関数をプロットする方法があるのですか?**私はpython3にはかなり新しく、提供されたヘルプに感謝します。

可能であれば、各図のレイアウトが既に存在するので、図では多くのサブプロットを使用しないようにしたいと考えています。ここで

は現在のGUIは、私はランダムな点を生成し、テストメソッドを呼び出したときのように見えるものである、あなたはそれがすべての制約を追加する場合 the same graph are plotted in each canvas

は、私もこのコードは、最終的になることを、言及することを見ることができます別のスレッドからのデータで更新されるグラフをプロットするために使用されます。

そして、ここのコードです:

from PyQt4 import QtGui 
    from .flight_dataUI import Ui_Dialog 
    import matplotlib.pyplot as plt 
    from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
    from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar 
    import random 

    class FlightData(QtGui.QDialog, Ui_Dialog): 
     def __init__(self, parent=None): 
      QtGui.QDialog.__init__(self, parent) 
      self.setupUi(self) 

      self.figure = plt.figure() # FlightData.figure = matplotlib.pyplot.figure() 
    #  Creates a figure widget self.name = FigureCanvas(self.figure) 
      self.speedGraph = FigureCanvas(self.figure) 
      self.heightGraph = FigureCanvas(self.figure) 
      self.mapGraph = FigureCanvas(self.figure) 
      self.angleGraph = FigureCanvas(self.figure) 
    # ------------------------------------------------------------- 
      self.speedLayout.addWidget(self.speedGraph) # insert widget "speedGraph" in speedLayout 
      self.heightLayout.addWidget(self.heightGraph) # insert widget "heightGraph" in heightLayout 
      self.mapLayout.addWidget(self.mapGraph) # insert widget "mapGraph" in mapLayout 
      self.angleLayout.addWidget(self.angleGraph) # insert widget "angleGraph" in angleLayout 
      self.ax = self.figure.add_subplot(111) 
      self.ax.hold(False) 

      self.init_widgets() 

     def init_widgets(self): 
      self.analyseButton.clicked.connect(self.open_analysedata) 
      self.draw_plot() 

     def open_analysedata(self): 
      self.done(2) # Closes and delete Dialog window et and return the int 2 as a results in main_window.py 

     def draw_plot(self): 
      data = [random.random() for i in range(10)] 
      self.ax.plot(data, '-*') 

答えて

0

pyplotをインポートしない埋め込む場合は、状態はあなただけのトラブルの原因となりますグローバルです。同じ図を使用して、4つのすべてのオブジェクトを初期化しています。FigureCanvasあなたは次のようなことをしたい:

from matplotlib.figure import Figure 

class FlightData(QtGui.QDialog, Ui_Dialog): 
    def __init__(self, parent=None): 
     QtGui.QDialog.__init__(self, parent) 
     self.setupUi(self) 
     self.figs = {} 
     self.canvas = {} 
     self.axs = {} 
     plot_names = ['speed', 'height', 'map', 'angle'] 
     for pn in plot_names: 
      fig = Figure() 
      self.canvas[pn] = FigureCanvas(fig) 
      ax = fig.add_subplot(1, 1, 1) 

      self.figs[pn] = fig 
      self.axs[pn] = ax 

     # ------------------------------------------------------------- 
     self.speedLayout.addWidget(self.canvas['speed']) 
     self.heightLayout.addWidget(self.canvas['height']) 
     self.mapLayout.addWidget(self.canvas['map']) 
     self.angleLayout.addWidget(self.canvas['angle']) 

    def draw_plot(self, target, data): 
     self.axs[target].plot(data, '-*') 
     self.canvas[target].draw_idle() 
+0

こんにちは、お返事ありがとうございます。私はあなたのほとんどがコードを理解し、試してみることにしました。しかし、私はこのNameerrorを "NameError:name 'Figure'が定義されていません" – SirIguan

+0

**編集:私の間違いは、私はmatplotlib.figureクラスから図をインポートしていないようです。コードは現在動作しており、私が望む限り、私はプロットを設定することができます。ありがとうございます!** – SirIguan

+0

ああ、コピー貼り付けに失敗して申し訳ありません – tacaswell

関連する問題