欢迎访问宙启技术站
智能推送

怎么在python3中利用PyQt5实现一个柱状图

发布时间:2023-05-18 06:54:58

PyQt5是一个Python的GUI(Graphical User Interface)编程工具包,可以为我们开发界面提供很大的帮助。在PyQt5中,许多绘图组件例如QPainter、QPen、QBrush等都非常的强大,可以帮助我们轻松实现各种图形的绘制。本文将详细介绍使用PyQt5实现一个柱状图的过程。

步骤一:准备数据

首先,准备好你所需要展示的数据,例如下面的数据:

data = {'A': 50, 'B': 70, 'C': 80, 'D': 60, 'E': 75}

它包含了5个数据,其中键表示不同的类别,而值则表示每个类别所对应的数值。

步骤二:创建Qt应用程序

在开始编写代码之前,必须先创建Qt应用程序。这可以通过使用QApplication类来实现,代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

app = QApplication(sys.argv)
window = QMainWindow()
window.show()
sys.exit(app.exec_())

在该代码中,将QApplication类实例化并传入sys.argv参数,该参数是传递给Python解释器的一个列表。然后,创建了一个QMainWindow对象,该对象是PyQt5中的主窗口类,调用show()方法显示窗口,最后调用sys.exit()方法,确保程序在调用exec_()结束后正常退出。

步骤三:创建坐标系

创建坐标系需要用到PyQt5中的QPainter类,它是一个灵活而强大的类,可以帮助我们实现绘图功能。使用QPainter画出坐标系的代码如下:

from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt

class Graph(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(100, 100, 600, 500)
        self.setWindowTitle('PyQt5 Bar Graph')
        
    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        self.drawGraph(qp)
        qp.end()
        
    def drawGraph(self, qp):
        qp.setPen(QColor(0, 0, 0))
        qp.setFont(QFont('Arial', 10))
        qp.drawText(250, 20, 'Bar Graph')
        qp.drawLine(50, 350, 500, 350)
        qp.drawLine(50, 50, 50, 350)

在这个代码中,首先,我们创建一个类Graph继承自QMainWindow类。在Graph类的构造函数中,将窗口的位置和尺寸以及窗口的标题设置好。

接着,我们覆盖了paintEvent()方法,并且在里面实现了绘图的操作。paintEvent()方法会在窗口显示时自动被Qt调用。

在drawGraph()方法中,我们先设置了绘图的所有参数,比如绘图的线条颜色、线条宽度和字体等。然后,使用drawText()方法显示图表名称,使用drawLine()方法画出x轴和y轴。

步骤四:绘制柱状图

接下来,我们需要在坐标系中绘制柱状图。在PyQt5中,绘制矩形有两个非常有用的函数:drawRect()和drawRoundedRect()。其中,drawRect()方法仅绘制普通的矩形,而drawRoundedRect()方法则可以绘制圆角矩形,效果更好。绘制柱状图的方法如下:

class Graph(QMainWindow):
    # ...

    def drawGraph(self, qp):
        # ...

        colWidth = 40
        colHeightRatio = 10
        x = 70
        y = 350

        for key, value in data.items():
            qp.setBrush(QColor(255, 0, 0))
            qp.drawRect(x, y-value*colHeightRatio, colWidth, value*colHeightRatio)
            qp.drawText(x+5, y+20, key)
            x += colWidth + 20

其中,colWidth表示柱子的宽度,colHeightRatio表示柱子高度的比例,用于将数据转换为像素值。x和y是柱状图的左下角的坐标。

循环遍历数据,对于每一个数据,使用setBrush()方法设置矩形的颜色,使用drawRect()方法画出柱状图,使用drawText()方法添加标签。

步骤五:运行程序

最后,我们在main()函数中创建Graph对象,并调用exec()方法运行程序。

if __name__=='__main__':
    app = QApplication(sys.argv)
    mygraph = Graph()
    mygraph.show()
    sys.exit(app.exec_())

运行程序,你将会看到如下的柱状图:

![这里写图片描述](https://img-blog.csdn.net/20180818001657325?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3VzZXJfcGFyYXNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)

到此为止,我们已经成功地使用PyQt5实现了一个柱状图。值得提醒的是,本文仅展示了如何在PyQt5中绘制柱状图的基本方法,实际应用中还需要进一步完善界面和交互等方面,使其更具实用性。