2012年7月25日水曜日

pyqwt入門その3 複数グラフの表示

pythonでグラフを描画その3は複数のグラフを描画させる。
これはQwtではなくQtの側の操作。

QwtPlotのオブジェクトを作ってそれをQWidgetにaddWidgetで加える。
それだけです。

データ同士を結ぶ線、左のグラフでは見えなくて、右では黒の線になっている。
実は左では線の色に白を指定して見難くしているだけ。
どうやって線自体を消すのだろう。。。


ソースも今後の参考に載せます。
import sys

from PyQt4.QtGui import QApplication, QWidget, QHBoxLayout 
from PyQt4.Qt import Qt, QPen, QSize, QBrush
from PyQt4.Qwt5.Qwt import QwtPlot, QwtPlotGrid, QwtPlotCurve, QwtSymbol

import numpy as np
from numpy import pi


class PlotWidget(QwtPlot):
    def __init__(self, title, *args):
        QwtPlot.__init__(self, *args)
        self.setTitle(title)
        self.setCanvasBackground(Qt.white)
        
        #grid
        grid = QwtPlotGrid()
        grid.attach(self)
        grid.setPen(QPen(Qt.black, 0, Qt.DotLine)) #make grid dotted-line
        
        self.replot()
        
class MultiPlotWidget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setWindowTitle("multiple graphs")
        
        hlayout = QHBoxLayout()
        self.setLayout(hlayout)
        
        #data creation
        x = np.linspace(-2*pi, 2*pi, 100)
        y1 = np.sin(x)
        y2 = np.cos(x)        
        
        #create plots
        plot1 = PlotWidget("plot1")
        curve1 = QwtPlotCurve('y=sin(x)')
        curve1.setPen(QPen(Qt.white, 0))
        curve1.setSymbol(QwtSymbol(QwtSymbol.Ellipse, QBrush(Qt.red), QPen(Qt.red), QSize(5,5)))       
        curve1.setData(x,y1)
        curve1.attach(plot1)
                
        plot2 = PlotWidget("plot2")
        curve2 = QwtPlotCurve('y=cos(x)')
        curve2.setPen(QPen(Qt.black, 0))
        curve2.setSymbol(QwtSymbol(QwtSymbol.Rect, QBrush(Qt.blue), QPen(Qt.blue), QSize(5,5)))       
        curve2.setData(x,y2)
        curve2.attach(plot2)
        
        #add plots to the main widget
        self.layout().addWidget(plot1)
        self.layout().addWidget(plot2)
        
        
        
def main():
    app = QApplication(sys.argv)

    plot = MultiPlotWidget()
    plot.setMinimumSize(300,200)
    plot.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

0 件のコメント:

コメントを投稿