使用PySide6的QtCharts模块制作三种常见统计图表的方法

 更新时间:2026年06月30日 09:19:06   作者:m0_61749394  
PySide6 是 Qt 官方的 Python 绑定库,不仅提供了强大的 GUI 开发能力,还内置了 QtCharts 模块,能够以原生渲染的方式绘制高质量的统计图表,本教程将详细介绍如何使用 PySide6 制作三种最常用的统计图表,需要的朋友可以参考下

1. 引言

PySide6 是 Qt 官方的 Python 绑定库,不仅提供了强大的 GUI 开发能力,还内置了 QtCharts 模块,能够以原生渲染的方式绘制高质量的统计图表。相比于 Matplotlib 等第三方库,PySide6 的图表在交互性、主题适配以及嵌入桌面应用时的性能表现上更具优势。

本教程将详细介绍如何使用 PySide6 制作三种最常用的统计图表:饼图、条形图和折线图。每个案例均包含完整的可运行代码,帮助你快速掌握核心 API 的使用。

环境准备:请确保已安装 PySide6。

2. 饼图的制作方法及完整代码案例

饼图适用于展示各部分在整体中的占比情况。在 PySide6 中,核心类为 QPieSeriesQPieSlice

核心步骤

  1. 创建 QPieSeries 对象。
  2. 使用 append() 方法添加标签和数值。
  3. 创建 QChart 并将 Series 添加进去。
  4. 使用 QChartView 展示图表。

完整代码案例

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCharts import QChart, QChartView, QPieSeries
from PySide6.QtGui import QPainter

class PieChartWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PySide6 饼图示例")
        self.resize(600, 400)

        # 1. 创建饼图系列
        series = QPieSeries()
        series.append("Python", 45)
        series.append("C++", 25)
        series.append("JavaScript", 20)
        series.append("Go", 10)

        # 可选:设置某一块突出显示
        slice_obj = series.slices()[0]
        slice_obj.setExploded()
        slice_obj.setLabelVisible(True)

        # 2. 创建图表并添加系列
        chart = QChart()
        chart.addSeries(series)
        chart.setTitle("编程语言使用占比")
        chart.legend().setVisible(True)

        # 3. 创建视图
        chart_view = QChartView(chart)
        chart_view.setRenderHint(QPainter.RenderHint.Antialiasing)

        self.setCentralWidget(chart_view)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = PieChartWindow()
    window.show()
    sys.exit(app.exec())

3. 条形图的制作方法及完整代码案例

条形图(柱状图)适合对比不同类别的数值大小。PySide6 提供 QBarSeriesQBarSetQBarCategoryAxis 来实现。

核心步骤

  1. 创建 QBarSet 定义数据系列。
  2. 创建 QBarSeries 并添加 Set。
  3. 配置 X 轴(类别轴)和 Y 轴(数值轴)。
  4. 将 Series 和 Axis 绑定到 QChart

完整代码案例

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCharts import (
    QChart, QChartView, QBarSeries, QBarSet,
    QBarCategoryAxis, QValueAxis
)
from PySide6.QtGui import QPainter, Qt

class BarChartWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PySide6 条形图示例")
        self.resize(700, 450)

        # 1. 定义数据
        set1 = QBarSet("2023年")
        set2 = QBarSet("2024年")
        set1.append([10, 20, 30, 40])
        set2.append([15, 25, 35, 45])

        # 2. 创建条形图系列
        series = QBarSeries()
        series.append(set1)
        series.append(set2)

        # 3. 创建图表
        chart = QChart()
        chart.addSeries(series)
        chart.setTitle("季度销售额对比")
        chart.setAnimationOptions(QChart.AnimationOption.SeriesAnimations)

        # 4. 配置 X 轴(类别)
        categories = ["Q1", "Q2", "Q3", "Q4"]
        axis_x = QBarCategoryAxis()
        axis_x.append(categories)
        chart.addAxis(axis_x, Qt.AlignmentFlag.AlignBottom)
        series.attachAxis(axis_x)

        # 5. 配置 Y 轴(数值)
        axis_y = QValueAxis()
        axis_y.setTitleText("销售额 (万元)")
        chart.addAxis(axis_y, Qt.AlignmentFlag.AlignLeft)
        series.attachAxis(axis_y)

        chart.legend().setVisible(True)

        # 6. 创建视图
        chart_view = QChartView(chart)
        chart_view.setRenderHint(QPainter.RenderHint.Antialiasing)
        self.setCentralWidget(chart_view)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = BarChartWindow()
    window.show()
    sys.exit(app.exec())

4. 折线图的制作方法及完整代码案例

折线图用于展示数据随时间或有序类别的变化趋势。核心类为 QLineSeries

核心步骤

  1. 创建 QLineSeries 并使用 append(x, y) 添加数据点。
  2. 创建 QChart 并添加 Series。
  3. 配置坐标轴(通常 X 轴为类别或时间,Y 轴为数值)。
  4. 使用 QChartView 渲染。

完整代码案例

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis
from PySide6.QtGui import QPainter
from PySide6.QtCore import Qt

class LineChartWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PySide6 折线图示例")
        self.resize(700, 450)

        # 1. 创建折线系列
        series = QLineSeries()
        series.setName("用户增长")
        series.append(0, 100)
        series.append(1, 150)
        series.append(2, 180)
        series.append(3, 250)
        series.append(4, 320)
        series.append(5, 400)

        # 2. 创建图表
        chart = QChart()
        chart.addSeries(series)
        chart.setTitle("月度用户增长趋势")
        chart.setAnimationOptions(QChart.AnimationOption.SeriesAnimations)

        # 3. 配置坐标轴
        axis_x = QValueAxis()
        axis_x.setTitleText("月份")
        axis_x.setRange(0, 5)
        chart.addAxis(axis_x, Qt.AlignmentFlag.AlignBottom)
        series.attachAxis(axis_x)

        axis_y = QValueAxis()
        axis_y.setTitleText("用户数")
        axis_y.setRange(0, 500)
        chart.addAxis(axis_y, Qt.AlignmentFlag.AlignLeft)
        series.attachAxis(axis_y)

        chart.legend().setVisible(True)

        # 4. 创建视图
        chart_view = QChartView(chart)
        chart_view.setRenderHint(QPainter.RenderHint.Antialiasing)
        self.setCentralWidget(chart_view)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = LineChartWindow()
    window.show()
    sys.exit(app.exec())

5. 总结

通过本教程,我们掌握了使用 PySide6 的 QtCharts 模块绘制三种基础图表的方法:

图表类型核心类适用场景
饼图QPieSeries展示部分与整体的比例关系
条形图QBarSeries, QBarSet对比不同类别的数值大小
折线图QLineSeries展示数据随时间/顺序的变化趋势

关键要点回顾

  1. 统一架构:所有图表都遵循 Series → Chart → ChartView 的三层结构。
  2. 坐标轴绑定:条形图和折线图需要手动创建坐标轴并通过 attachAxis() 与 Series 关联。
  3. 抗锯齿:务必调用 setRenderHint(QPainter.RenderHint.Antialiasing) 以获得平滑的渲染效果。
  4. 动画支持:通过 setAnimationOptions() 可以为图表添加生动的过渡动画。

PySide6 的图表模块还支持散点图、面积图、极坐标图等多种类型,且支持鼠标交互、缩放和自定义主题。掌握以上三种基础图表后,你可以轻松扩展到更复杂的数据可视化场景。

以上就是使用PySide6的QtCharts模块制作三种常见统计图表的方法的详细内容,更多关于PySide6 QtCharts制作统计图表的资料请关注脚本之家其它相关文章!

相关文章

  • python smtplib发送带附件邮件小程序

    python smtplib发送带附件邮件小程序

    这篇文章主要为大家详细介绍了python smtplib发送带附件邮件小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • python实现简单爬虫功能的示例

    python实现简单爬虫功能的示例

    本文主要是介绍python实现简单爬虫功能的示例,主要实现了把我们想要的图片爬虫到本地的一个示例,有需要的朋友可以了解一下。
    2016-10-10
  • python处理变量交换与字符串及判断的小妙招

    python处理变量交换与字符串及判断的小妙招

    本文记录一些 Python 日常编程中的小妙招,并使用 IPython 进行交互测试,让我们更好的了解和学习 Python 的一些特性,对大家的学习或工作具有一定的价值,需要的朋友可以参考下
    2021-09-09
  • Python yield 关键词,

    Python yield 关键词,

    这篇文章主要介绍了Python yield 关键词,要理解yield的作用,你必须理解生成器是什么。在理解生成器之前,必须先理解迭代器。下面文章我们就先从
    迭代器开始展开yield关键词的相关自资料 ,需要的朋友可以参考一下
    2021-12-12
  • Python编程scoketServer实现多线程同步实例代码

    Python编程scoketServer实现多线程同步实例代码

    这篇文章主要介绍了Python编程scoketServer实现多线程同步实例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python3导入自定义模块的三种方法详解

    Python3导入自定义模块的三种方法详解

    这篇文章主要给大家介绍了关于Python3导入自定义模块的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • pytorch 利用lstm做mnist手写数字识别分类的实例

    pytorch 利用lstm做mnist手写数字识别分类的实例

    今天小编就为大家分享一篇pytorch 利用lstm做mnist手写数字识别分类的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Pandas实现按照时间维度合并多张表

    Pandas实现按照时间维度合并多张表

    文章对比了Pandas中pd.merge()与pd.concat()的拼接方法,指出merge()通过索引合并更灵活,而concat()为硬性拼接,随后使用sort_index()解决索引排序问题,最终实现两表按时间值正确合并
    2025-09-09
  • Python的加密模块md5、sha、crypt使用实例

    Python的加密模块md5、sha、crypt使用实例

    这篇文章主要介绍了Python的加密模块md5、sha、crypt使用实例,本文给出了MD5和crypt模块的代码实例,需要的朋友可以参考下
    2014-09-09
  • Python几种绘制时间线图的方法

    Python几种绘制时间线图的方法

    这篇文章主要介绍了Python几种绘制时间线图的方法,Matplotlib 作为 Python 家族最为重要的可视化工具,其基本的 API 以及绘制流程还是需要掌握的
    2022-08-08

最新评论