QCustomPlot-绘制X轴为日期的折线图

主要代码如下:

void Widget::InitQLineXDateAddData()
{customPlot = new QCustomPlot(this);// 创建日期时间类型的刻度生成器QSharedPointer<QCPAxisTickerDateTime> dateTimeTicker(new QCPAxisTickerDateTime);dateTimeTicker->setDateTimeFormat("yyyy-MM-dd"); // 设置日期时间格式//dateTimeTicker->setTickCount(8);// 将刻度生成器应用到 X 轴customPlot->xAxis->setTicker(dateTimeTicker);customPlot->xAxis->setTickLabelRotation(45); // 设置刻度标签旋转角度,以便更好地显示// 设置 X 轴的范围(使用 QDateTime 转换为键)QDateTime startDateTime = QDateTime(QDate(2024, 3, 13), QTime(0, 0, 0), Qt::UTC);QDateTime endDateTime = QDateTime(QDate(2024, 3, 20), QTime(0, 0, 0), Qt::UTC); // 计算日期范围内的天数,并设置为刻度数量int numDays = startDateTime.daysTo(endDateTime) + 1; // 包括开始和结束日期dateTimeTicker->setTickCount(numDays);// 将 QDateTime 转换为自 Unix 纪元以来的秒数double startKey = startDateTime.toMSecsSinceEpoch() / 1000.0;double endKey = endDateTime.toMSecsSinceEpoch() / 1000.0;customPlot->xAxis->setRange(QCPRange(startKey, endKey));// 添加并设置两个图形的penQCPGraph *graph1 = customPlot->addGraph();graph1->setPen(QPen(Qt::blue));QCPGraph *graph2 = customPlot->addGraph();graph2->setPen(QPen(Qt::red));// 设置图例customPlot->legend->setVisible(true);graph1->setName("A产品");graph2->setName("B产品");customPlot->axisRect()->insetLayout()->setInsetAlignment(0,Qt::AlignBottom|Qt::AlignRight);graph1->setLineStyle(QCPGraph::lsLine); // 实线graph1->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, QColor(Qt::blue), 6)); // 圆形散点graph2->setLineStyle(QCPGraph::lsLine); // 实线graph2->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 6)); // 圆形散点QVector<double> keys1;int numValues = 6; // 要生成的值的数量for (int i = 0; i < numValues; ++i ) {keys1.push_back(startKey + i * 86400);}QVector<double> values1 = {100, 300, 500, 800, 900, 800};QVector<double> keys2 = {startKey, startKey + 86400, startKey + 2 * 86400, startKey + 3 * 86400, startKey + 4 * 86400, startKey + 5 * 86400};QVector<double> values2 = {100, 200, 400, 900, 1100, 600};// 设置数据并显示图表graph1->setData(keys1, values1);graph2->setData(keys2, values2);// 设置数据点标签显示for (int i = 0; i < keys1.size(); ++i) {QCPItemText *textItem = new QCPItemText(customPlot);//textItem->setPositionAlignment(Qt::AlignTop | Qt::AlignHCenter);textItem->setPositionAlignment( Qt::AlignBottom | Qt::AlignHCenter);textItem->position->setType(QCPItemPosition::ptPlotCoords);textItem->position->setCoords(keys1[i], values1[i]);textItem->setText(QString::number(values1[i]));textItem->setFont(QFont(font().family(), 10)); // Set font size as needed//textItem->setPen(QPen(Qt::blue)); // Set text colortextItem->setPen(Qt::NoPen); // Set no pen (remove border)textItem->setBrush(QBrush(Qt::transparent)); // Set transparent brush to hide the background}// 设置数据点标签显示for (int i = 0; i < keys1.size(); ++i) {QCPItemText *textItem = new QCPItemText(customPlot);//textItem->setPositionAlignment(Qt::AlignTop | Qt::AlignHCenter);textItem->setPositionAlignment( Qt::AlignBottom | Qt::AlignHCenter);textItem->position->setType(QCPItemPosition::ptPlotCoords);textItem->position->setCoords(keys1[i], values2[i]);textItem->setText(QString::number(values2[i]));textItem->setFont(QFont(font().family(), 10)); // Set font size as needed//textItem->setPen(QPen(Qt::blue)); // Set text colortextItem->setPen(Qt::NoPen); // Set no pen (remove border)textItem->setBrush(QBrush(Qt::transparent)); // Set transparent brush to hide the background}// 整个折线图标题QCPTextElement* PlotTitle = new QCPTextElement(customPlot, "折线图统计分析-近5天对比");//PlotTitle->setPositionAlignment(Qt::AlignCenter);PlotTitle->setFont(QFont("宋体", 12, QFont::Bold)); // 设置标题的字体customPlot->plotLayout()->insertRow(0); // 在图表布局中插入一行customPlot->plotLayout()->addElement(0, 0, PlotTitle); // 将标题添加到插入的行// 设置Y轴范围为0-2000customPlot->yAxis->setRange(0, 2000);customPlot->yAxis->ticker()->setTickCount(10);customPlot->setGeometry(QRect(10,20,700,600));// 自动调整坐标轴范围以适应数据,并重新绘制图表//customPlot->rescaleAxes();customPlot->replot();QVBoxLayout* pVBoxLayout = new QVBoxLayout(this);pVBoxLayout->addWidget(customPlot);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯第642题——跳蚱蜢

题目描述 如下图所示&#xff1a; 有 9 只盘子&#xff0c;排成 1 个圆圈。 其中 8 只盘子内装着 8 只蚱蜢&#xff0c;有一个是空盘。 我们把这些蚱蜢顺时针编号为 1 ~ 8。 每只蚱蜢都可以跳到相邻的空盘中&#xff0c; 也可以再用点力&#xff0c;越过一个相邻的蚱蜢跳到空盘…

数据库学习记录(一)基础语法与单表查询

基础sql语句分类 DDL操作&#xff08;图形化界面&#xff09; 用来定义数据库对象的&#xff0c;例如创建数据库&#xff0c;创建表单 数据库操作 表操作 DML操作&#xff08;掌握&#xff09; 1、insert为添加语句&#xff0c;该语句功能是添加相关数据到表结构中 下面为添…

【爬虫】 突破Cloudflare 5秒盾的艺术:使用Cloudscraper

无心生大用,有物不通神 &#x1f3b5; 闪现吃血王昭君《道德经》 在当今的互联网世界中&#xff0c;保护网站免受恶意访问变得尤为重要。Cloudflare是一种流行的解决方案&#xff0c;提供了多种安全功能&#xff0c;包括一个被广泛称为"5秒盾"(…

【Anaconda】换源常用命令

【Anaconda】换源常用命令 注意换源只需配置清华或中科大或阿里中的任意一个即可&#xff0c;都列出来只是为了备用&#xff0c;方便查找 每创建一个新的虚拟环境&#xff0c;都需要换一次源 查看当前源 conda config --show channels配置清华源 清华源官网 conda config -…

学习笔记 | 微信小程序项目day04

今日学习内容 热门推荐下转页面 热门推荐下转页面 1、定义类型 import type { PageResult, GoodsItem } from ./global/** 热门推荐 */ export type HotResult {/** id信息 */id: string/** 活动图片 */bannerPicture: string/** 活动标题 */title: string/** 子类选项 */…

tensorflow 随机采样

实现随机采样 dataset tf.data.Dataset.from_tensor_slices((x, y)) dataset dataset.shuffle(len(x)).batch(32)train_size, val_size, test_size 0.8, 0.1, 0.1train_dataset dataset.take(int(train_size * len(dataset))) val_dataset dataset.skip(int(train_size *…

开源的OCR工具基本使用:PaddleOCR/Tesseract/CnOCR

前言 因项目需要&#xff0c;调研了一下目前市面上一些开源的OCR工具&#xff0c;支持本地部署&#xff0c;非调用API&#xff0c;主要有PaddleOCR/CnOCR/chinese_lite OCR/EasyOCR/Tesseract/chineseocr/mmocr这几款产品。 本文主要尝试了EasyOCR/CnOCR/Tesseract/PaddleOCR这…

【开源】SpringBoot框架开发不良邮件过滤系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统用户模块2.2 收件箱模块2.3 发件箱模块2.4 垃圾箱模块2.5 回收站模块2.6 邮箱过滤设置模块 三、实体类设计3.1 系统用户3.2 邮件3.3 其他实体 四、系统展示五、核心代码5.1 查询收件箱档案5.2 查询回收站档案5.3 新…

C语言 数组

文章目录 1.一维数组2.二维数组3.冒泡排序4.一维函数的数组名5.二维数组的数组名 1.一维数组 语法形式&#xff1a;type_t arr_name [const_n] 数组是一组相同类型元素的集合 type_t是指数组的元素类型 arr_name是指数组的名称 const_n是一个常量表达式&#xff0c;用来指定数…

mongoDB7.0.6版安装与使用(最新版踩坑记录)

这里写自定义目录标题 0.前言1.MongoDB下载与安装2.启动服务及验证3.命令行访问4.navicat访问5.停止服务 0.前言 本文总结了最近版mongoDB下载安装的过程及简单的应用&#xff0c;整个过程不涉及修改配置文件&#xff0c;甚至不用设置用户名密码也不用登录认证&#xff0c;在进…

HarmonyOS NEXT应用开发—投票动效实现案例

介绍 本示例介绍使用绘制组件中的Polygon组件配合使用显式动画以及borderRadius实现投票pk组件。 效果预览图 使用说明 加载完成后会有一个胶囊块被切割成两个等大的图形来作为投票的两个选项&#xff0c;中间由PK两字分隔开点击左边选项&#xff0c;两个图形会随着选择人数…

2080: [蓝桥杯2023初赛] 飞机降落

题目描述 N 架飞机准备降落到某个只有一条跑道的机场。 其中第 i 架飞机在 Ti 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di 个单位时间。 即它最早可以于 Ti 时刻开始降落&#xff0c;最晚可以于 Ti Di 时刻开始降落。 降落过程需要Li个单位时间。 一架…

Java城管智慧执法管理系统源码带APP

目录 一、系统概述 二、系统开发环境 三、功能模块 四、应用价值 1、提升案件办理效率 2、提升监管效能 3、提升行政执法水平 4、推进行政执法创新 一、系统概述 智慧城管系统是一个基于现代信息技术手段的综合管理平台&#xff0c;旨在通过强化信息获取自动化、监督管…

二分算法详、

二分的概念 二分算法&#xff1a;是用来在一个有序数组中查找一个元素的算法。时间复杂度O&#xff08;log n&#xff09; 二分的二段性 集合中的元素有存在分界线&#xff0c;给定条件可以将集合中的元素分为两部分&#xff0c;一部分满足条件&#xff0c;一部分不满足条件…

官宣!眉州东坡终生认养大熊猫“星星”

2024年03月19日,眉州东坡终生认养大熊猫“星星”签约仪式暨第八届有机川熊猫竹笋节在北京和重庆同时举行。眉州东坡董事长王刚先生、重庆动物园副处长殷毓中先生等嘉宾在重庆共同出席了此次认养仪式,重庆动物园向眉州东坡授予大熊猫终生认养证书,宣布星星正式加入眉州东坡大家庭…

Game of Nodes 16进8

KNIME 还可以用成这样? 是不是有点过分了。 Tableau, PowerBI 同学请绕行&#xff0c;我们讨论的不是同一个东西... 由于 Game of Nodes 没有公开题目&#xff0c;且各个小组赛的题目也是不一样的&#xff0c;在这里我们只能通过拼接图来猜想小组赛题目了。 有的解决方案我甚至…

Android源码阅读 SharedPreferences - 1

目录 前言 正文 SharedPreferences.java PreferenceManager.java ContextImpl.java 前言 由于笔者目前水平限制&#xff0c;表达能力有限&#xff0c;尽请见谅。 SharedPreferences提供了一种轻量级的数据存储方式&#xff0c;允许保存和获取简单的键值对。它适用于保存少…

中霖教育:一级建造师和一级造价师通过率高吗?

在建筑工业领域&#xff0c;一级建造师和一级造价工程师考试都是比较热门的考试&#xff0c;每年参加的人数都非常多&#xff0c;如果只备考一个的话&#xff0c;2024年选择哪项考试更为合适? 一建和一造的平均通过率均未超过10%&#xff0c;两者难度相近&#xff1a; 1. 一…

TCP粘包问题优化

TCP粘包问题是指在使用TCP协议进行数据传输时&#xff0c;由于TCP协议本身的特性&#xff0c;可能会导致多个数据包被粘在一起发送&#xff0c;或者在接收端接收到的数据包中包含了多个独立的数据包。这种情况可能会导致数据解析出错&#xff0c;从而影响应用程序的正常运行。 …

SpringBoot 中配置日期格式

SpringBoot 中配置日期格式 这个错误提示表明在尝试将一个字符串转换成 java.util.Date 类型时失败了&#xff0c;因为字符串的格式不符合预期的日期格式。在你的情况下&#xff0c;字符串 “2024-03-14 18:55:55” 似乎不符合默认的日期格式。 解决这个问题的方法之一是告诉…