实战PyQt5: 152-QChart图表之日期时间坐标轴
ztj100 2025-04-08 20:53 36 浏览 0 评论
在统计图表中,使用时间作为某一坐标轴的情况非常常见,比如,常见的一年间月度销售统计,财务统计等等。在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):当由min和max指定的坐标轴的最大值或最小值发生了改变,将发出此信号。
- 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对象转换成一个数。
- 使用正则表达式分离数据并去掉多余的空格。
请多多关注,评论,收藏,点赞,和转发。
相关推荐
- 30天学会Python编程:16. Python常用标准库使用教程
-
16.1collections模块16.1.1高级数据结构16.1.2示例...
- 强烈推荐!Python 这个宝藏库 re 正则匹配
-
Python的re模块(RegularExpression正则表达式)提供各种正则表达式的匹配操作。...
- Python爬虫中正则表达式的用法,只讲如何应用,不讲原理
-
Python爬虫:正则的用法(非原理)。大家好,这节课给大家讲正则的实际用法,不讲原理,通俗易懂的讲如何用正则抓取内容。·导入re库,这里是需要从html这段字符串中提取出中间的那几个文字。实例一个对...
- Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)
-
实现功能:Python数据分析实战-利用正则表达式提取文本中的URL网址和邮箱...
- python爬虫教程之爬取当当网 Top 500 本五星好评书籍
-
我们使用requests和re来写一个爬虫作为一个爱看书的你(说的跟真的似的)怎么能发现好书呢?所以我们爬取当当网的前500本好五星评书籍怎么样?ok接下来就是学习python的正确姿...
- 深入理解re模块:Python中的正则表达式神器解析
-
在Python中,"re"是一个强大的模块,用于处理正则表达式(regularexpressions)。正则表达式是一种强大的文本模式匹配工具,用于在字符串中查找、替换或提取特定模式...
- 如何使用正则表达式和 Python 匹配不以模式开头的字符串
-
需要在Python中使用正则表达式来匹配不以给定模式开头的字符串吗?如果是这样,你可以使用下面的语法来查找所有的字符串,除了那些不以https开始的字符串。r"^(?!https).*&...
- 先Mark后用!8分钟读懂 Python 性能优化
-
从本文总结了Python开发时,遇到的性能优化问题的定位和解决。概述:性能优化的原则——优化需要优化的部分。性能优化的一般步骤:首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它...
- Python“三步”即可爬取,毋庸置疑
-
声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块importreimportrequests#第二步获取你想爬取的网页地址,发送请求,获取网页内...
- 简单学Python——re库(正则表达式)2(split、findall、和sub)
-
1、split():分割字符串,返回列表语法:re.split('分隔符','目标字符串')例如:importrere.split(',','...
- Lavazza拉瓦萨再度牵手上海大师赛
-
阅读此文前,麻烦您点击一下“关注”,方便您进行讨论和分享。Lavazza拉瓦萨再度牵手上海大师赛标题:2024上海大师赛:网球与咖啡的浪漫邂逅在2024年的上海劳力士大师赛上,拉瓦萨咖啡再次成为官...
- ArkUI-X构建Android平台AAR及使用
-
本教程主要讲述如何利用ArkUI-XSDK完成AndroidAAR开发,实现基于ArkTS的声明式开发范式在android平台显示。包括:1.跨平台Library工程开发介绍...
- Deepseek写歌详细教程(怎样用deepseek写歌功能)
-
以下为结合DeepSeek及相关工具实现AI写歌的详细教程,涵盖作词、作曲、演唱全流程:一、核心流程三步法1.AI生成歌词-打开DeepSeek(网页/APP/API),使用结构化提示词生成歌词:...
- “AI说唱解说影视”走红,“零基础入行”靠谱吗?本报记者实测
-
“手里翻找冻鱼,精心的布局;老漠却不言语,脸上带笑意……”《狂飙》剧情被写成歌词,再配上“科目三”背景音乐的演唱,这段1分钟30秒的视频受到了无数网友的点赞。最近一段时间随着AI技术的发展,说唱解说影...
- AI音乐制作神器揭秘!3款工具让你秒变高手
-
在音乐创作的领域里,每个人都有一颗想要成为大师的心。但是面对复杂的乐理知识和繁复的制作过程,许多人的热情被一点点消磨。...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 30天学会Python编程:16. Python常用标准库使用教程
- 强烈推荐!Python 这个宝藏库 re 正则匹配
- Python爬虫中正则表达式的用法,只讲如何应用,不讲原理
- Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)
- python爬虫教程之爬取当当网 Top 500 本五星好评书籍
- 深入理解re模块:Python中的正则表达式神器解析
- 如何使用正则表达式和 Python 匹配不以模式开头的字符串
- 先Mark后用!8分钟读懂 Python 性能优化
- Python“三步”即可爬取,毋庸置疑
- 简单学Python——re库(正则表达式)2(split、findall、和sub)
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)