实战PyQt5: 152-QChart图表之日期时间坐标轴
ztj100 2025-04-08 20:53 43 浏览 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对象转换成一个数。
- 使用正则表达式分离数据并去掉多余的空格。
请多多关注,评论,收藏,点赞,和转发。
相关推荐
- 其实TensorFlow真的很水无非就这30篇熬夜练
-
好的!以下是TensorFlow需要掌握的核心内容,用列表形式呈现,简洁清晰(含表情符号,<300字):1.基础概念与环境TensorFlow架构(计算图、会话->EagerE...
- 交叉验证和超参数调整:如何优化你的机器学习模型
-
准确预测Fitbit的睡眠得分在本文的前两部分中,我获取了Fitbit的睡眠数据并对其进行预处理,将这些数据分为训练集、验证集和测试集,除此之外,我还训练了三种不同的机器学习模型并比较了它们的性能。在...
- 机器学习交叉验证全指南:原理、类型与实战技巧
-
机器学习模型常常需要大量数据,但它们如何与实时新数据协同工作也同样关键。交叉验证是一种通过将数据集分成若干部分、在部分数据上训练模型、在其余数据上测试模型的方法,用来检验模型的表现。这有助于发现过拟合...
- 深度学习中的类别激活热图可视化
-
作者:ValentinaAlto编译:ronghuaiyang导读使用Keras实现图像分类中的激活热图的可视化,帮助更有针对性...
- 超强,必会的机器学习评估指标
-
大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣]构建机器学习模型的关键步骤是检查其性能,这是通过使用验证指标来完成的。选择正确的验证指...
- 机器学习入门教程-第六课:监督学习与非监督学习
-
1.回顾与引入上节课我们谈到了机器学习的一些实战技巧,比如如何处理数据、选择模型以及调整参数。今天,我们将更深入地探讨机器学习的两大类:监督学习和非监督学习。2.监督学习监督学习就像是有老师的教学...
- Python 模型部署不用愁!容器化实战,5 分钟搞定环境配置
-
你是不是也遇到过这种糟心事:花了好几天训练出的Python模型,在自己电脑上跑得顺顺当当,一放到服务器就各种报错。要么是Python版本不对,要么是依赖库冲突,折腾半天还是用不了。别再喊“我...
- 神经网络与传统统计方法的简单对比
-
传统的统计方法如...
- 自回归滞后模型进行多变量时间序列预测
-
下图显示了关于不同类型葡萄酒销量的月度多元时间序列。每种葡萄酒类型都是时间序列中的一个变量。假设要预测其中一个变量。比如,sparklingwine。如何建立一个模型来进行预测呢?一种常见的方...
- 苹果AI策略:慢哲学——科技行业的“长期主义”试金石
-
苹果AI策略的深度原创分析,结合技术伦理、商业逻辑与行业博弈,揭示其“慢哲学”背后的战略智慧:一、反常之举:AI狂潮中的“逆行者”当科技巨头深陷AI军备竞赛,苹果的克制显得格格不入:功能延期:App...
- 时间序列预测全攻略,6大模型代码实操
-
如果你对数据分析感兴趣,希望学习更多的方法论,希望听听经验分享,欢迎移步宝藏公众号...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 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)