百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

实战PyQt5: 152-QChart图表之日期时间坐标轴

bigegpt 2024-09-17 12:44 36 浏览

在统计图表中,使用时间作为某一坐标轴的情况非常常见,比如,常见的一年间月度销售统计,财务统计等等。在QChart中提供了日期时间坐标轴QDateTimeAxis类可以方便地将日期和时间添加到图表的坐标轴。

QDateTimeAxis

QDateTimeAxis类将日期和时间添加到图表的坐标轴。可以将QDateTimeAxis设置为显示带有刻度线,网格线和阴影的坐标轴样式。可以通过设置适当的DateTime格式来配置坐标轴的标签显示样式。QDateTimeAxis可以正确使用从4714 BCE到287396 CE的日期。QDateTimeAxis可以与任何QXYSeries一起使用。

使用QDateTime.toMSecsSinceEpoch()将数据点添加到图表序列中。

series = QLineSeries()
 
xValue = QDateTime()
xValue.setDate(QDate(2019, 1, 18))
xValue.setTime(QTime(9, 34))
yValue = 12
series.append(xValue. toMSecsSinceEpoch(), yValue)
 
xValue.setDate(QDate(2020, 5, 11))
xValue.setTime(QTime(11, 14))
yValue = 22
series.append(xValue. toMSecsSinceEpoch(), yValue)

下面的代码说明了如何将图表序列添加到图表中,并将X轴设置为QDateTimeAxis

chartView = QChartView()
chartView.chart().addSeries(series)
 
......
axisX = QDatetimeAxis()
axisX.setFormat('dd-MM-yy h:mm')
chartView.chart().setAxisX(axisX, series)

QDateTimeAxis常用函数:

  • setFormat(self, format):设置为坐标轴创建时间显示使用的格式字符串。
  • setMax(self, max):设置坐标轴的最大值。
  • setMin(self, min):设置坐标轴的最小值。
  • setRange(self, min, max):设置坐标轴值的范围。
  • setTickCount(self, count):设置坐标轴上刻度线的数量。

QDateTimeAxis常用信号:

  • formatChanged(self, format):当由format指定的坐标轴时间显示格式发生了改变,将发出此信号。
  • maxChanged(self, max):当max指定坐标轴的最大值发生了变化,将发出此信号。
  • minChanged(self, min):当由min指定坐标轴的最小值发生了变化,将发出此信号。
  • rangeChanged(self, min, max):当由minmax指定的坐标轴的最大值或最小值发生了改变,将发出此信号。
  • tickCountChanged(self, tickCount):当由tickCount指定的坐标轴上的刻度线数量改变时,将发出此信号。

日期时间坐标轴示例

基于Qt提供的C++演示代码,示例图表显示了太阳黑子的数据如何随时间变化,在代码中通过使用QDateTime. toMSecsSinceEpoch方法将QDateTime对象转换成一个数添加到线型图表序列QLineSeries。完整代码如下:

import sys,re
from PyQt5.QtCore import Qt, QFile, QTextStream, QIODevice, QDateTime, QDate
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from  PyQt5.QtChart import QChart, QChartView, QLineSeries, QDateTimeAxis, QValueAxis
 
import sundata_rc
 
class DemoDateTimeAxis(QMainWindow):
    def __init__(self, parent=None):
        super(DemoDateTimeAxis, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战 Qt for Python: 日期时间坐标轴演示')      
        # 设置窗口大小
        self.resize(820, 540)
        
        self.createChart()
    
    def createChart(self):
            
        #设置折线数据
        lineSeries = QLineSeries()
        
        sunSpots = QFile(':sun')
        if not sunSpots.open(QIODevice.ReadOnly | QIODevice.Text):
            QMessageBox.information(self, '错误', '读取数据文件出错')
            return
        
        stream = QTextStream(sunSpots)
        while not stream.atEnd():
            line = stream.readLine()
            if line.startswith('#') or line.startswith(':'):
                continue
            #正则表达式 '\s{1,}' 匹配一个或多个空格
            values = re.split('\s{1,}', line)
            momentInTime = QDateTime()
            momentInTime.setDate(QDate(int(values[0]), int(values[1]), 15))
            lineSeries.append(momentInTime.toMSecsSinceEpoch(), float(values[2]))
        sunSpots.close()
        
        #创建图表
        chart = QChart()
        chart.legend().hide()
        chart.addSeries(lineSeries)
        chart.setTitle('太阳黑子数量(由太空天气预报中心提供)')
        
        #坐标轴
        axisX = QDateTimeAxis()
        axisX.setTickCount(10)
        axisX.setFormat('MMM yyyy')
        axisX.setTitleText('日期')
        chart.addAxis(axisX, Qt.AlignBottom)
        lineSeries.attachAxis(axisX)
        
        axisY = QValueAxis()
        axisY.setLabelFormat('%i')
        axisY.setTitleText('太阳黑子数量')
        chart.addAxis(axisY, Qt.AlignLeft)
        lineSeries.attachAxis(axisY)
        
        #图表视图
        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)
        
        self.setCentralWidget(chartView)
      
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoDateTimeAxis()
    window.show()
    sys.exit(app.exec())   

本文知识点

  • 了解日期时间坐标轴QDateTimeAxis。
  • 使用QDateTime. toMSecsSinceEpoch方法将QDateTime对象转换成一个数。
  • 使用正则表达式分离数据并去掉多余的空格。

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


前一篇: 实战PyQt5: 151-QChart图表之给图表添加标注

相关推荐

方差分析简介(方差分析通俗理解)

介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...

正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃

吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...

Python数据可视化:箱线图多种库画法

概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...

多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读

作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...

方差分析 in R语言 and Excel(方差分析r语言例题)

今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...

可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图

前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...

matplotlib 必知的 15 个图(matplotlib各种图)

施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...

R ggplot2常用图表绘制指南(ggplot2绘制折线图)

ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...

Python数据可视化:从Pandas基础到Seaborn高级应用

数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...

Python 数据可视化常用命令备忘录

本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...

统计图的种类(统计图的种类及特点图片)

统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...

实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)

大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

通过AI提示词让Deepseek快速生成各种类型的图表制作

在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...

数据可视化:解析箱线图(box plot)

箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...

[seaborn] seaborn学习笔记1-箱形图Boxplot

1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...