博主个人微信:xituxiaoshutong100

PyQt5系列教程(十七)画饼图

PyQt5开发 迷途小书童 401℃ 0评论

软硬件环境

  • Windows 10 64bit
  • Anaconda3 with python 3.8
  • PyCharm 2021.1
  • PyQt 5.15

简介

饼图,是数据可视化中最常见的一种方式,维基百科中的定义是这样的

饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系。在饼图中,每个扇区的弧长(以及圆心角和面积)大小为其所表示的数量的比例。这些扇区合在一起刚好是一个完全的圆形。顾名思义,这些扇区拼成了一个切开的饼形图案。

下面这张图就是一个典型的饼图

PyQtChart

本文使用PyQtChart这个库来画饼图,这个库,需要我们单独安装,它并不在PyQt5中,虽然它们长的很像

pip install PyQtChart

代码实践

必要注释已经写在了代码行中

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtChart import QChart, QChartView, QPieSeries, QPieSlice
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt

class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("PyQt5饼图")

        # 显示位置
        self.setGeometry(100, 100, 800, 600)
        self.create_piechart()
        self.show()

    def create_piechart(self):
        # 创建QPieSeries对象,它用来存放饼图的数据
        series = QPieSeries()

        # append方法中的数字,代表的是权重,完成可以改成其它,如80,70,60等等
        series.append("Python", 8)
        series.append("Java", 7)
        series.append("C", 6)
        series.append("C++", 5)
        series.append("PHP", 4)
        series.append("Swift", 3)

        # 单独处理某个扇区
        slice = QPieSlice()

        # 这里要处理的是python项,是依据前面append的顺序,如果是处理C++项的话,那索引就是3
        slice = series.slices()[0]

        # 突出显示,设置颜色
        slice.setExploded(True)
        slice.setLabelVisible(True)
        slice.setPen(QPen(Qt.red, 2))
        slice.setBrush(Qt.red)

        # 创建QChart实例,它是PyQt5中的类
        chart = QChart()
        # QLegend类是显示图表的图例,先隐藏掉
        chart.legend().hide()
        chart.addSeries(series)
        chart.createDefaultAxes()

        # 设置动画效果
        chart.setAnimationOptions(QChart.SeriesAnimations)

        # 设置标题
        chart.setTitle("饼图示例")

        chart.legend().setVisible(True)

        # 对齐方式
        chart.legend().setAlignment(Qt.AlignBottom)

        # 创建ChartView,它是显示图表的控件
        chartview = QChartView(chart)
        chartview.setRenderHint(QPainter.Antialiasing)

        self.setCentralWidget(chartview)

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec_())

最后,代码执行效果如下

参考资料

源码下载

https://github.com/xugaoxiang/learningPyQt5

PyQt5系列教程

更多PyQt5教程,请移步

https://xugaoxiang.com/category/python/pyqt5/

喜欢 (0)
发表我的评论
取消评论

表情
退出移动版