网站首页 > 编程文章 正文
在统计图表中,使用时间作为某一坐标轴的情况非常常见,比如,常见的一年间月度销售统计,财务统计等等。在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对象转换成一个数。
- 使用正则表达式分离数据并去掉多余的空格。
请多多关注,评论,收藏,点赞,和转发。
猜你喜欢
- 2024-09-11 Qt开发-文本编辑器中的数据存取(qt文本编辑器代码)
- 2024-09-11 Qt数据库应用15-通用数据库同步(qt的数据库操作)
- 2024-09-11 开源|一个基于QT设计串口调试工具
- 2024-09-11 第23天 | 28天学会PyQt5,多行文本框
- 2024-09-11 PyQt: QAbstractButton开关按钮与互斥的用法
- 2024-09-11 第6篇 基础(六)实现Qt文本编辑功能
- 2024-09-11 实战PyQt5: 003-PyQt的信号和槽机制简介
- 2024-09-11 Qt开发经验小技巧181-185(qt软件开发)
- 2024-09-11 Qt开发经验总结之武林秘籍(qt开发程序)
- 2024-09-11 Qt状态机框架介绍(二)(状态机编程实例及适用范围)
你 发表评论:
欢迎- 05-142014年最流行前端开发框架对比评测
- 05-14七爪源码:如何使用 Next.js 构建 Shopify 店面
- 05-14Web 前端怎样入门?
- 05-14我为什么不建议你使用框架
- 05-14推荐几个好用的React UI 框架
- 05-14PDFsharp:强大的 .NET 跨平台 PDF 处理库
- 05-14一组开源免费的Web动画图标,荐给需要的设计师和程序员
- 05-14salesforce 零基础学习(二十九)Record Types简单介绍
- 最近发表
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)