pyqtgraph文档笔记(四)在 pyqtgraph 中绘图

pyqtgraph提供了很多快捷的方法,所以可以从多个阶段和多种方式绘图。

一、绘制方法
1、pyqtgraph.plot()

通过创建plot window 来显示数据,直接画图并显示。

import pyqtgraph as pg
pg.plot([1,2,3])
2、Plotwidget.plot()

创建一个Plotwidget来显示。可以使用PyQt的QMainwindow或者QWidget。如果使用 QMainwindow ,设置 setCentralWidget 。如果使用 QWIdget ,还需要设置布局,在布局中加入Plotwidget。

  • QMainwindow -> setCentralWidget
  • QWidget -> layout(如QHBoxLayout) ->addWidget
import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication,QMainWindow
app=QApplication([])
win=QMainWindow()

plot=pg.PlotWidget()
plot.plot([1,4,3])

win.setCentralWidget(plot)
win.show()

app.exec()

PlotWidget方法签名:
pg.PlotWidget(parent=None, background='default', plotItem=None, **kargs)

3、使用PlotItem.plot()

使用PlotItem 并 添加到 GraphicView中显示。

import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication

app=QApplication([])

plot = pg.PlotItem()
plot.plot([1,4,3])

view = pg.GraphicsView()
view.setCentralWidget(plot)

view.show()
app.exec_()

PlotItem()方法签名:
pg.PlotItem( parent=None, name=None, labels=None, title=None, viewBox=None, axisItems=None, enableMenu=True, **kargs, )

4、GraphicsLayout.addPlot()

在布局中添加图

import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication

app=QApplication([])


layout = pg.GraphicsLayout()
plot = layout.addPlot()
plot.plot([1,4,3])

view = pg.GraphicsView()
view.setCentralItem(layout)
view.show()

app.exec_()
二、Plot通用参数
  • x : 可选,如果未指定,则将自动生成整数系列。

  • y: Y轴 数据。

  • pen :绘制绘图线时使用的笔,如’red’, ‘g’, ‘b’, (255,0,0) 或 设置为None 禁用。

  • symbol : 描述要用于每个点的符号形状的字符串。或者,这也可以是一系列字符串,每个点都有不同的符号。符号的取值:['o', 's', 't', 't1', 't2', 't3', 'd', '+', 'x', 'p', 'h', 'star', 'arrow_up', 'arrow_right', 'arrow_down', 'arrow_left', 'crosshair']
    -symbolPen 和symbolBrush: sybol 的画笔和画刷。
    -fillLevel: 填充到的具体y值,用于面积图等。
    symbol的示意图如下:
    pyqtgraph文档笔记(四)在 pyqtgraph 中绘图_第1张图片
    该图在样例代码中,代码如下:

"""
This example shows all the scatter plot symbols available in pyqtgraph.

These symbols are used to mark point locations for scatter plots and some line
plots, similar to "markers" in matplotlib and vispy.
"""

import pyqtgraph as pg

app = pg.mkQApp("Symbols Examples")
win = pg.GraphicsLayoutWidget(show=True, title="Scatter Plot Symbols")
win.resize(1000,600)

pg.setConfigOptions(antialias=True)

plot = win.addPlot(title="Plotting with symbols")
plot.addLegend()
plot.plot([0, 1, 2, 3, 4], pen=(0,0,200), symbolBrush=(0,0,200), symbolPen='w', symbol='o', symbolSize=14, name="symbol='o'")
plot.plot([1, 2, 3, 4, 5], pen=(0,128,0), symbolBrush=(0,128,0), symbolPen='w', symbol='t', symbolSize=14, name="symbol='t'")
plot.plot([2, 3, 4, 5, 6], pen=(19,234,201), symbolBrush=(19,234,201), symbolPen='w', symbol='t1', symbolSize=14, name="symbol='t1'")
plot.plot([3, 4, 5, 6, 7], pen=(195,46,212), symbolBrush=(195,46,212), symbolPen='w', symbol='t2', symbolSize=14, name="symbol='t2'")
plot.plot([4, 5, 6, 7, 8], pen=(250,194,5), symbolBrush=(250,194,5), symbolPen='w', symbol='t3', symbolSize=14, name="symbol='t3'")
plot.plot([5, 6, 7, 8, 9], pen=(54,55,55), symbolBrush=(55,55,55), symbolPen='w', symbol='s', symbolSize=14, name="symbol='s'")
plot.plot([6, 7, 8, 9, 10], pen=(0,114,189), symbolBrush=(0,114,189), symbolPen='w', symbol='p', symbolSize=14, name="symbol='p'")
plot.plot([7, 8, 9, 10, 11], pen=(217,83,25), symbolBrush=(217,83,25), symbolPen='w', symbol='h', symbolSize=14, name="symbol='h'")
plot.plot([8, 9, 10, 11, 12], pen=(237,177,32), symbolBrush=(237,177,32), symbolPen='w', symbol='star', symbolSize=14, name="symbol='star'")
plot.plot([9, 10, 11, 12, 13], pen=(126,47,142), symbolBrush=(126,47,142), symbolPen='w', symbol='+', symbolSize=14, name="symbol='+'")
plot.plot([10, 11, 12, 13, 14], pen=(119,172,48), symbolBrush=(119,172,48), symbolPen='w', symbol='d', symbolSize=14, name="symbol='d'")
plot.plot([11, 12, 13, 14, 15], pen=(253, 216, 53), symbolBrush=(253, 216, 53), symbolPen='w', symbol='arrow_down', symbolSize=22, name="symbol='arrow_down'")
plot.plot([12, 13, 14, 15, 16], pen=(189, 189, 189), symbolBrush=(189, 189, 189), symbolPen='w', symbol='arrow_left', symbolSize=22, name="symbol='arrow_left'")
plot.plot([13, 14, 15, 16, 17], pen=(187, 26, 95), symbolBrush=(187, 26, 95), symbolPen='w', symbol='arrow_up', symbolSize=22, name="symbol='arrow_up'")
plot.plot([14, 15, 16, 17, 18], pen=(248, 187, 208), symbolBrush=(248, 187, 208), symbolPen='w', symbol='arrow_right', symbolSize=22, name="symbol='arrow_right'")
plot.setXRange(-2, 4)

if __name__ == '__main__':
    pg.exec()

三、绘图类的组织

PyQtGraph在很大程度上基于Qt的GraphicsView框架,见官方文档。最重要的是:1)Qt GUI由QWidgets组成,2) QGraphicsView 用于显示复杂图形,3)QGraphicsItems定义QGraphicsView中显示的对象。
绘图类的组织有三个层次,分别是:
1、 数据类 (QGraphicsItem的子类)

  • PlotCurveItem : 折图图

  • ScatterPlotItem : 散点图

  • PlotDataItem :组合 PlotCurveItem 和 ScatterPlotItem。上面讨论的绘图函数创建此类型的对象。
    2、 容器类1(QGraphicsItem的子类,用于包含其他 QGraphicsItem 对象,但该容器又必须包含在GraphicsView 中显示)

  • PlotItem : 显示单图,且只能在 GraphicsView 中使用

  • GraphicsLayout: 用于显示多个PlotItem。

  • ViewBox :用户可以使用鼠标缩放/平移 ViewBox 的内容。通常,所有PlotData/PlotCurve/ScatterPlotItem都从 ViewBox 中显示。

AxisItem : 显示轴值、刻度和标签。最常与 PlotItem 一起使用。
3、容器类2(QWidget的子类;可以嵌入在PyQt GUI中)

  • PlotWidget : GraphicsView 的子类,其中显示了单个PlotItem。即封装了PlotItem,因此提供的大多数方法可参考PlotItem。

  • GraphicsLayoutWidget : 显示单个GraphicsLayout的 QWidget 子类。即提供了对Layout的一个封装。

也就是说,图形必须显示在GraphicsView中,pyqtgraph提供了两个封装好的GraphicsView,PlotWidget和GraphicLayoutWidget。沿着这两条主线,可以按如下顺序构造图形显示:

  • PlotDataItem -> ViewBox->PlotItem->PlotWidget。
  • PlotItem-> GraphicsLayout->GraphicsLayoutWidget
    如下图所示:
    pyqtgraph文档笔记(四)在 pyqtgraph 中绘图_第2张图片

如图中所示,PlotDataItem被装载入ViewBox,ViewBoxp加上title, AxisItem,右键菜单等形成PlotItem,PlotItem可以被放入PlotWidget(用于单图),也可以放入GraphicsLayout(用于多图)。
而PlotItem已经含有viewbox, GraphicLayouWidget已经含有GraphicLayout的封装,所以可以省略相关的添加代码,示意代码如下:


import pyqtgraph as pg
app=pg.mkQApp()

item=pg.PlotDataItem([1,2,4])#默认是线状图
plotitem=pg.PlotItem()
plotitem.addItem(item) #内部将item添加到了viewbox,等同于plotitem.vb.addItem(item)

plotwidget=pg.PlotWidget()
plotwidget.setCentralItem(plotitem)
plotwidget.show()

'''#也可以用如下的方式
widget=pg.GraphicsLayoutWidget()
widget.addItem(plotitem) #内部将item添加到了GraphicsLayout,等同于widget.ci.addItem(plotitem)
widget.show()
'''

app.exec_()

你可能感兴趣的:(pyqtgraph,python,qt)