实战PyQt5: 147-QChart图表之使用多种类型图表


在前面的文章中,我们介绍了各种图表的基本样式,演示了各种图表序列的创建方法,在本文我们将多种不同的图表序列显示在一个图表中。

一个图表中显示多种类型的图表序列

在实际应用中,常常需要在一个图表中显示多种不同的图表序列,比如一个常见的例子就是同时在一个图表中显示折线图和柱状图。为了使图标能正确地显示多个不同类型的图表序列,必须为这些图表创建统一的自定义坐标轴。如果不创建自定义坐标轴,那么每个单独的图表序列将按比例缩放以使用图表的最大面积来显示,对单个图表序列,这样做完全没有问题,对多个图表序列,则会造成不正确的显示效果。

多图表序列测试

示例显示了如何组合不同的图表并正确设置坐标轴。在示例中,我们使用相同的坐标轴,将线形图与条形图组合在一起。完整代码如下:

import sys
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt, QPoint
from PyQt5.QtWidgets import QApplication, QMainWindow
from  PyQt5.QtChart import (QChartView, QChart, QBarSeries, QBarSet, QLineSeries,
                            QLegend, QBarCategoryAxis, QValueAxis)
 
class DemoLineAndBar(QMainWindow):
    def __init__(self, parent=None):
        super(DemoLineAndBar, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战 Qt for Python: 多种类型图表演示')      
        # 设置窗口大小
        self.resize(480, 360)
        
        self.createChart()
        
    def createChart(self):
        
        #创建条状单元
        barSet0 = QBarSet('Jane')
        barSet1 = QBarSet('Jone')
        barSet2 = QBarSet('Axel')
        barSet3 = QBarSet('Mary')
        barSet4 = QBarSet('Sam')
        
        barSet0.append([1, 2, 3, 4, 5, 6])
        barSet1.append([5, 0, 0, 4, 0, 7])
        barSet2.append([3, 5, 8, 13, 8, 5])
        barSet3.append([5, 6, 7, 3, 4, 5])
        barSet4.append([9, 7, 5, 3, 1, 2])
        
        #条状图
        barSeries = QBarSeries()
        barSeries.append(barSet0)
        barSeries.append(barSet1)
        barSeries.append(barSet2)
        barSeries.append(barSet3)
        barSeries.append(barSet4)
        
        #设置折线数据
        lineSeries = QLineSeries()
        lineSeries.setName('trend')
        lineSeries.append(QPoint(0, 4))
        lineSeries.append(QPoint(1, 15))
        lineSeries.append(QPoint(2, 20))
        lineSeries.append(QPoint(3, 4))
        lineSeries.append(QPoint(4, 12))
        lineSeries.append(QPoint(5, 17))
         
        #创建图表
        chart = QChart()
        chart.addSeries(barSeries)
        chart.addSeries(lineSeries)
        chart.setTitle('折线图+柱状图示例')
        
        #设置横向坐标(X轴)
        categories = ['一月', '二月', '三月', '四月', '五月', '六月']
        axisX = QBarCategoryAxis()
        axisX.append(categories)
        chart.addAxis(axisX, Qt.AlignBottom)
        barSeries.attachAxis(axisX)
        lineSeries.attachAxis(axisX)
        axisX.setRange('一月', '六月')
        
        #设置纵向坐标(Y轴)
        axisY = QValueAxis()
        axisY.setRange(0, 20)
        chart.addAxis(axisY, Qt.AlignLeft)
        barSeries.attachAxis(axisY)
        lineSeries.attachAxis(axisY)
        
        #图例属性
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)
        
        #图表视图
        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)
        
        self.setCentralWidget(chartView)
      
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoLineAndBar()
    window.show()
    sys.exit(app.exec())   

运行结果如下图:

本文知识点

  • 多种类型的图表序列组合在一个图表中。
  • 在一个图表中,多种图表序列使用统一的坐标轴。

前一篇: 实战PyQt5: 146-QChart图表之水平堆积柱状图


请多多关注,评论,收藏,点赞,和转发。

相关文章

Qt for Python—Qt Designer 概览

前言本系列第三篇文章(Qt for Python学习笔记—应用程序初探 )、第四篇文章(Qt for Python学习笔记—应用程序再探 )中均是使用纯代码方式来开发 PySide6 GUI 应用程序...

PySide:基于 Qt 框架的 Python 高级 UI 库

PySide 是 Python 的官方 Qt 库绑定,由 Qt for Python 提供支持。它允许开发者使用 Python 编写基于 Qt 框架的图形用户界面(GUI)应用。作为一个功能强大的跨平...

使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂

PySide2 是 Qt 框架的 Python 绑定,允许你使用 Python 创建功能强大的跨平台 GUI 应用程序。PySide2 的基本使用方法:安装 PySide2pip install Py...

118.Python——PyQt窗体上显示监控视频画面

在做计算机视觉项目时,经常需要打开和显示监控视频画面,对画面进行分析处理。使用OpenCV打开摄像头显示视频画面,视频可以参看:1.3 OpenCV打开本地摄像头并显示视频画面。本文主要实现在PyQt...

进入Python的世界02外篇-Pycharm配置Pyqt6

为什么这样配置,要开发带UI的python也只能这样了,安装过程如下:一 安装工具打开终端:pip install PyQt6 PyQt6-tools二 打开设置并汉化点击plugin,安装汉化插件,...

wxPython和PyQt谁才是最赞的Python GUI库

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,Python GUI图形库允许Python程序员很方便的创建完整的、功能键全的GUI用户界面。作为Python开发者,你迟早都会用到...