Python GUI教程(十三):在GUI中使用pyqtgraph绘图库

原文:https://www.cnblogs.com/zeliangzhang/p/15261896.html

pyqtgraph绘图库

在GUI中集成图形工具是很多桌面程序常有的功能,最为普遍的,就是各种投资交易工具中的价格走势图。比如股票的指数走势,股票的K线图等。

在PyQt的应用程序中集成图绘功能,有很多种方案,比如:

  • OpenGL:一个功能强大的二维三维专业图形绘制工具;
  • Matplotlib:Python中很经典的图形绘制模块,基本python 标准绘图工具,缺点速度有点慢
  • PyQtGraph:基于Qt平台,提供交互的数据显示图形绘制,特点速度快。

各种图形绘制方案都有自己的优点,但是论与PyQt程序的融合度,还是当属PyQtGraph。

PyQtGraph用于图形绘制有很多的优势:

  • 拥有丰富的图形种类;
  • 能够快速地实时更新绘图数据;
  • 能够进行交互式的操作;
  • 多种标记功能;
  • ……

PyQtGraph的安装很简单,使用pip就可以直接安装:

pip install pyqtgraph

安装之后直接在Python代码中使用import 引入就可以使用了。

import pyqtgraph as pg

PyQtGraph自带一个丰富的示例模块,我们在命令行中输入:

python -m pyqtgraph.examples

就会自动打开示例手册的GUI程序:

我们可以选择运行一个示例进行运行:

前面我们说了PyQtGraph与PyQt的结合度很高,下面我们来看看在PyQt中如何调用PyQtGraph绘制的图形

在GUI中集成pyqtgraph图形

在PyQtGraph中,有几种绘制图形的方法:

  • pyqtgraph.plot():创建一个新的绘图窗口来显示数据;
  • PlotWidget.plot():将一组新的数据添加到现有的绘图小部件;
  • PlotItem.plot():将一组新的数据添加到现有的绘图小部件;
  • GraphicsLayout.addPlot():添加一个新的图形到一个图形层中;

根据PyQtGraph这几种绘图方式,我们在PyQt中可以在窗口部件中显示图形,也可以在一个新的窗口的显示图形。

下面我们在窗口部件中显示茅台股票近半年来的K线图,作为在PyQt中集成显示PyQtGraph图形的例子。

首先,在我们之前创建的GUI的基础上,新增一个选项卡,在其中放置一个VerticalLayout层布局:

然后,按照惯例,将UI文件转换为Python文件,并新建一个Python文件引入。

根据PyQtGraph的示例,我们新建一个绘制K线图的类CandlestickItem:

class CandlestickItem(pg.GraphicsObject):  
    def __init__(self, data):  
        pg.GraphicsObject.**init**(self)  
        self.data = data ## data must have fields: time, open, close, min, max  
        self.generatePicture()

    def generatePicture(self):
        self.picture = QtGui.QPicture()
        p = QtGui.QPainter(self.picture)
        p.setPen(pg.mkPen('w'))
        w = (self.data[1][0] - self.data[0][0]) / 3.
        for (t, open, close, min, max) in self.data:
            p.drawLine(QtCore.QPointF(t, min), QtCore.QPointF(t, max))
            if open > close:
                p.setBrush(pg.mkBrush('g'))
            else:
                p.setBrush(pg.mkBrush('r'))
            p.drawRect(QtCore.QRectF(t-w, open, w*2, close-open))
        p.end()

    def paint(self, p, *args):
        p.drawPicture(0, 0, self.picture)

    def boundingRect(self):
        return QtCore.QRectF(self.picture.boundingRect())

然后,我们创建一个函数chart(),用于通过tushare模块获取股票的历史数据,并将数据传入之前定义好的用于生成K线图的类:

def chart():
    hist_data = ts.get_hist_data('600519',start='2017-05-01',end='2017-11-24')
    data_list = []
    axis = []
    for dates,row in hist_data.iterrows():
        # 将时间转换为数字
        date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')
        t = date2num(date_time)
        # t = dict(enumerate(datetime))
        open,high,close,low = row[:4]
        datas = (t,open,close,low,high)
        data_list.append(datas)
        axis.append(t)
    # print(axis)
    axis_dict = dict(enumerate(axis))
    item = CandlestickItem(data_list)
    plt = pg.PlotWidget()
    # print(plt.getAxis('bottom'))
    plt.addItem(item)
    plt.showGrid(x=True,y=True)
    return plt

接着,在GUI程序的主类MainWindow()的init(self)中进行调用:

class MainWindow(object):  
    def __init__(self):  
        …………  
        self.ui.verticalLayout_3.addWidget(chart())  
        …………

最后我们运行代码:

这样,PyQtGraph的图形作为一个窗口部件集成到了选项卡中。

PyQtGraph的用法和功能还有很多,大家可以在自带的示例库,官方文档(http://www.pyqtgraph.org/documentation/index.html),github中(GitHub - pyqtgraph/pyqtgraph: Fast data visualization and GUI tools for scientific / engineering applications)获取到最新最全的使用方法和技巧。

### 回答1: pyqtgraph是一个用于在PyQt5制2D图形的库。 使用pyqtgraph可以制各种各样的图形,包括线条、散点、柱状图、饼图等等。它具有很高的性能和灵活性,可以处理大量的数据,并且可以通过各种参数调整图形的样式和外观。 制图形的第一步是创建一个图窗口,并设置窗口的大小和标题。然后,可以创建一个图形对象,并向其添加数据。可以通过设置线条的颜色、宽度和样式来调整图形的外观。还可以设置坐标轴的范围和刻度,并添加图例和标题,以便更好地表达数据的含义。 pyqtgraph还支持交互式操作,包括缩放、平移和旋转。可以使用鼠标或触摸屏来操作图形,并实时更新数据。此外,pyqtgraph还提供了一些常用的工具,如放大镜和测量工具,可以帮助用户更好地分析数据。 总而言之,pyqtgraph是一个强大的图库,可以用于在PyQt5制各种各样的2D图形。它提供了丰富的功能和灵活的操作方式,使得图变得简单而快速。无论是对数据进行分析还是进行数据可视化,pyqtgraph都可以发挥巨大的作用。 ### 回答2: PyQtGraph是一个Python库,用于制高性能和交互式的科学图形。下面简单介绍如何使用PyQtGraph进行制。 首先,我们需要安装PyQtGraph库。可以通过在命令行运行以下命令来安装: ``` pip install pyqtgraph ``` 安装完成后,我们可以在Python脚本导入PyQtGraph库并开始制。 首先,我们需要创建一个窗口,用于显示制的图形。可以使用`pyqtgraph.GraphicsWindow()`或`pyqtgraph.QtGui.QMainWindow()`来创建一个窗口对象。 然后,我们可以在窗口创建一个图区域,用于制图形。可以使用`window.addPlot()`或`pg.plot()`来创建一个图区域对象。 接下来,我们可以设置图区域的属性,如标题、坐标轴标签等。可以使用`plot.setTitle()`、`plot.setLabel()`等方法来设置属性。 然后,我们可以准备数据来制。可以使用`numpy`或其他方式生成数据。 最后,我们可以使用图区域的`plot.setData()`方法将数据传递给图区域进行制。可以设置图的类型、颜色、线型等属性。 除了基本的图,PyQtGraph还支持许多其他功能,如制多个曲线、添加图例、交互式操作等。 总之,使用PyQtGraph,我们可以方便地进行高性能和交互式的科学图形制。希望这个简单介绍对你有帮助! ### 回答3: PyQtGraph是一个用于制科学和工程数据的Python图形库。它基于PyQt和NumPy开发,具有高效图和交互功能。 使用PyQtGraph制图形可以简单快速。首先,我们需要导入相应的模块,例如: ```python import pyqtgraph as pg from pyqtgraph.Qt import QtCore, QtGui ``` 接下来,我们可以创建一个窗口和一个图部件: ```python app = QtGui.QApplication([]) win = pg.GraphicsWindow() plot = win.addPlot() ``` 然后,我们可以通过设置图形的坐标轴范围、标签等属性来自定义图形: ```python plot.setXRange(0, 10) plot.setYRange(0, 10) plot.setLabel('left', 'Y') plot.setLabel('bottom', 'X') ``` 接着,我们可以通过传递数据给plot()函数来制图形: ```python x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plot.plot(x, y) ``` 最后,我们需要执行应用程序的事件循环以显示窗口和图形: ```python QtGui.QApplication.instance().exec_() ``` 这样就可以制一个简单的曲线图。当然,PyQtGraph还提供了丰富的功能,可以制各种类型的图形,如散点图、柱状图、3D图等。 总的来说,PyQtGraph是一个功能强大且易于使用的图形库,可以满足科学和工程图的需求。通过简单的几行代码,我们可以制出各种类型的图形,并通过设置图形的属性来自定义图形的外观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值