QT-demo:0轴分布图表
版本:5.9
第一种: 使用 PyQt5 和 Matplotlib 库
安装所需的库:
pip install PyQt5 matplotlib
创建和显示图表:
import sys
import numpy as np
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvasclass PlotCanvas(FigureCanvas):def __init__(self, parent=None):fig, self.ax = plt.subplots()super(PlotCanvas, self).__init__(fig)self.setParent(parent)self.plot()def plot(self):# Example datax = np.linspace(0, 10, 1000)y = np.sin(x) * 1000self.ax.fill_between(x, y, where=(y > 0), interpolate=True, color='red', alpha=0.5)self.ax.fill_between(x, y, where=(y <= 0), interpolate=True, color='blue', alpha=0.5)self.ax.axhline(0, color='black', linewidth=0.5)self.ax.set_xlabel('Time')self.ax.set_ylabel('Power (MW)')self.ax.set_title('Power Output')self.draw()class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Power Output Graph")self.setGeometry(100, 100, 800, 600)self.canvas = PlotCanvas(self)self.setCentralWidget(self.canvas)app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
上面的代码创建了一个包含两个区域(红色和蓝色)的图表,表示功率输出为正值或负值。您可以将 x 和 y 数据替换为您的实际数据,并根据需要调整图表的标签和标题。
请运行此代码来查看生成的图表。这个示例假定您使用的是 Python,并且已安装 PyQt5 和 Matplotlib 库。
第二种:使用 Qt5 和 QCustomPlot 库
确保已经安装QCustomPlot 库,如果你还没有安装,可以从 QCustomPlot 官方网站 下载,并将其包含到你的 Qt 项目中。
自取链接:链接:https://pan.baidu.com/s/1CHe1wN5rhQAPd8bcyvlRfQ?pwd=1024
提取码:1024
以下是完整demo:
main.cpp:
#include <QApplication>
#include <QMainWindow>
#include "qcustomplot.h"void setupPlot(QCustomPlot *customPlot) {// Create dataQVector<double> x(1001), y(1001); // initialize with entries 0..1000for (int i = 0; i < 1001; ++i) {x[i] = i / 50.0 - 10; // x goes from -10 to 10y[i] = qSin(x[i]) * 1000; // let's plot a sine wave}// Create graph and assign data to it:QCPGraph *graph = customPlot->addGraph();graph->setData(x, y);// Set axis labels:customPlot->xAxis->setLabel("Time");customPlot->yAxis->setLabel("Power (MW)");// Set axis ranges to show the data:customPlot->xAxis->setRange(-10, 10);customPlot->yAxis->setRange(-1500, 1500);// Set fill color:QCPGraph *negativeGraph = customPlot->addGraph();negativeGraph->setData(x, y);negativeGraph->setPen(Qt::NoPen);negativeGraph->setBrush(QBrush(QColor(255, 0, 0, 100))); // Red color for positive valuesQCPGraph *positiveGraph = customPlot->addGraph();positiveGraph->setData(x, y);positiveGraph->setPen(Qt::NoPen);positiveGraph->setBrush(QBrush(QColor(0, 0, 255, 100))); // Blue color for negative valuesfor (int i = 0; i < y.size(); ++i) {if (y[i] > 0) {y[i] = 0;}}negativeGraph->setData(x, y);for (int i = 0; i < y.size(); ++i) {if (y[i] < 0) {y[i] = 0;}}positiveGraph->setData(x, y);customPlot->replot();
}int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow window;QCustomPlot customPlot;setupPlot(&customPlot);window.setCentralWidget(&customPlot);window.resize(800, 600);window.show();return app.exec();
}
-
创建一个
qcustomplot.h和qcustomplot.cpp文件,并从 QCustomPlot 官方网站 下载最新版本的 QCustomPlot 代码,然后将其包含在你的项目中。 -
在你的项目文件中(例如
CMakeLists.txt或*.pro文件),确保包含 QCustomPlot 的头文件和源文件。例如,在*.pro文件中添加以下内容:QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = your_project_name TEMPLATE = appSOURCES += main.cpp \qcustomplot.cppHEADERS += qcustomplot.h - 使用 Qt Creator 打开项目并运行它。
-
这样你就可以看到一个类似于你提供的图像的绘图了。这个示例代码生成了一个正弦波并将其分成两个区域(红色和蓝色),分别表示功率输出的正值和负值。
运行截图:

如果想把上下都填充颜色,且上下颜色区分。我们需要分别为正值和负值创建两个图层,并为其填充颜色分别设置为红色和蓝色。还需要确保数据正确的分开填充,以便能显示正确的颜色。
#include <QApplication>
#include <QMainWindow>
#include "qcustomplot.h"void setupPlot(QCustomPlot *customPlot) {// Create dataQVector<double> x(1001), y(1001), y_positive(1001), y_negative(1001); // initialize with entries 0..1000for (int i = 0; i < 1001; ++i) {x[i] = i / 50.0 - 10; // x goes from -10 to 10y[i] = qSin(x[i]) * 1000; // let's plot a sine wavey_positive[i] = (y[i] > 0) ? y[i] : 0; // Only positive valuesy_negative[i] = (y[i] < 0) ? y[i] : 0; // Only negative values}// Create positive graph and assign data to it:QCPGraph *positiveGraph = customPlot->addGraph();positiveGraph->setData(x, y_positive);positiveGraph->setPen(Qt::NoPen);positiveGraph->setBrush(QBrush(QColor(0, 0, 255, 100))); // Blue color for positive values// Create negative graph and assign data to it:QCPGraph *negativeGraph = customPlot->addGraph();negativeGraph->setData(x, y_negative);negativeGraph->setPen(Qt::NoPen);negativeGraph->setBrush(QBrush(QColor(255, 0, 0, 100))); // Red color for negative values// Set axis labels:customPlot->xAxis->setLabel("Time");customPlot->yAxis->setLabel("Power (MW)");// Set axis ranges to show the data:customPlot->xAxis->setRange(-10, 10);customPlot->yAxis->setRange(-1500, 1500);customPlot->replot();
}int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow window;QCustomPlot customPlot;setupPlot(&customPlot);window.setCentralWidget(&customPlot);window.resize(800, 600);window.show();return app.exec();
}
分别为正值和负值创建了两个独立的数据集 'y_positive' 和 'y_negative',并将它们添加到两个不同图层中。然后分别设置这些图层的填充颜色。这样既可以保证0轴上方填充为蓝色,下方为红色。
请确保你已经正确地包含了 QCustomPlot 的头文件和源文件,并且在项目文件中添加了对 printsupport 模块的引用:
QT += core gui printsupportgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = chart_test
TEMPLATE = appSOURCES += main.cpp \qcustomplot.cppHEADERS += qcustomplot.h
运行效果:

报错解决:qcustomplot.cpp:15260: error: undefined reference to `_imp___ZN8QPrinterC1ENS_11PrinterModeE' debug/qcustomplot.o: In function `ZN11QCustomPlot7savePdfERK7QStringiiN3QCP9ExportPenES2_S2_': D:\Qt_Projects\My_Demo\build-chart_test-Desktop_Qt_5_15_2_MinGW_32_bit-Debug/../chart_test/qcustomplot.cpp:15260: undefined reference to `_imp___ZN8QPrinterC1ENS_11PrinterModeE'
这个错误通常是由于缺少 Qt 打印模块的链接。为了修复这个问题,需要在项目文件中添加对 Qt 打印支持模块的引用。
QT += printsupport
这个修改确保项目链接了 printsupport 模块,从而解决 QPrinter 的未定义引用问题。
相关文章:
QT-demo:0轴分布图表
版本:5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库: pip install PyQt5 matplotlib创建和显示图表: import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…...
git远程仓库限额的解决方法——大文件瘦身
Git作为世界上最优秀的分布式版本控制工具,也是优秀的文件管理工具,它赋予了项目成员对项目进行远程协同开发能力,因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台,比如国内的Gitee,国外的Github&#…...
碰撞检测技术在AI中的重要作用
引言: 随着人工智能技术的不断发展,AI已经渗透到我们生活的方方面面。在游戏、机器人、虚拟现实等领域中,碰撞检测技术扮演着至关重要的角色。本文将探讨碰撞检测技术在AI中的作用,以及如何利用这项技术来改善AI系统的性能和用户体…...
UE5 Cesium2 最新使用地理配准子关卡构造全球场景
参考官方最新教程:Building Global Scenes with Georeferenced Sublevels – Cesium 创建持久关卡(主关卡) 这里一般包含DynamicPawn、CesiumSunSky 和 Cesium World Terrain 全球场景通用的对象。子关卡的创立,官方教程分为了两…...
【Java数据结构】详解LinkedList与链表(二)
目录 1.❤️❤️前言~🥳🎉🎉🎉 2.反转一个单链表 3. 找到链表的中间节点 4.输入一个链表,输出该链表中倒数第k个结点。 5.合并两个有序链表 6.链表分割 7. 判定链表的回文结构 8.输入两个链表,找…...
【精读文献】J. Environ. Manage.|青藏高原生态恢复项目下植被覆盖动态及其对生态系统服务的约束效应
目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 2.1 研究背景 2.2 研究现状 03 研究区域与数据集 3.1 研究区域 3.2 研究数据 04 研究方法 4.1 趋势分析 4.2 残差趋势分析 4.3 偏相关 4.4 生态系统服务评价 4.5 约束线的定义和提取 05 研究结果 5.1 植被…...
QT之常用控件
一个图形化界面当然需要有各种各样的控件,QT也不例外,在QT designer中就有提供各种各样的控件,用以开发图形化界面。 而想使用好一个QT控件,就需要了解这些控件。 QWidget 在QT中,所有控件都继承自 QWidget 类&…...
【嵌入式硬件】DRV8874电机驱动
目录 1 芯片介绍 1.1 特性简介 1.2 引脚配置 1.3 最佳运行条件 2 详细说明 2.1 PMODE配置控制模式 2.1.1 PH/EN 控制模式 2.1.2 PWM 控制模式 2.1.3 独立半桥控制模式 2.2 电流感测和调节 2.2.1 IPROPI电流感测 2.2.2 IMODE电流调节 3.应用 3.1设计要求 3.2 设计…...
考研数学:有些无穷小不能用等价无穷小的公式?
今天要给大家分享的笔记是:《有些无穷小虽然是无穷小,但却不能用无穷小的相关公式》:...
谷歌浏览器的平替,内置开挂神器,我已爱不释手!
油猴浏览器正式版是一款基于谷歌Chromium源码开发的浏览器,它集成了集成了强大的油猴扩展(Tampermonkey),使得用户可以轻松安装各种脚本,从而增强网页浏览体验。提供了一个更加个性化和高效的浏览体验。 油猴扩展&…...
UMLChina为什么叒要翻译《分析模式》?
UMLChina受机械工业出版社委托,重新翻译《分析模式》。 Martin Fowler的“Analysis Patterns,Reusable Object Models”,原书出版于1997年,至今为止未出第2版。 2004年,机械工业出版社出版该书中译本《分析模式》。 …...
npm install 安装很慢如何解决?
1. 使用淘宝镜像 淘宝提供了一个更快的 npm 镜像源,可以大大加快依赖包的下载速度。你可以通过以下命令来设置淘宝镜像: npm config set registry https://registry.npmmirror.com然后再次运行 npm install: npm install2. 使用 nrm 切换镜…...
哈夫曼树的构造,哈夫曼树的存在意义--求哈夫曼编码
一:哈夫曼树的构造 ①权值,带权路径长度。 ②一组确定权值的叶子节点可以构造多个不同的二叉树,但是带权路径长度min的是哈夫曼树 ③算法基本思想及其实操图片演示 注:存储结构和伪代码 1 初始化: 构造2n-1棵只有一个根节点的二叉树,parent=rchild=lchild=-1; 其中…...
一个全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核详解》(可下载)
随着摩尔定律的逐渐放缓,传统的芯片设计方法面临着越来越多的挑战。而FPGA以其并行处理能力和可编程性,为解决复杂问题提供了新的途径。它允许设计者在同一个芯片上实现多种不同的功能模块,极大地提高了资源的利用率和系统的综合性能。 FPGA…...
virtualbox识别windows上usb设备
当你插入 USB 时,你的宿主操作系统可以轻松访问它并使用其中的文件。如果需要VirtualBox 的虚拟机也能访问物理机的 USB设备,需要安装安装扩展包管理器。 第一步: 要安装 VirtualBox 扩展包,只需访问 VirtualBox 官方下载页面&a…...
LabVIEW步进电机的串口控制方法与实现
本文介绍了在LabVIEW环境中通过串口控制步进电机的方法,涵盖了基本的串口通信原理、硬件连接步骤、LabVIEW编程实现以及注意事项。通过这些方法,用户可以实现对步进电机的精确控制,适用于各种自动化和运动控制应用场景。 步进电机与串口通信…...
云计算-高级云资源配置(Advanced Cloud Provisioning)
向Bucket添加公共访问(Adding Public Access to Bucket) 在模块5中,我们已经看到如何使用CloudFormation创建和更新一个Bucket。现在我们将进一步更新该Bucket,添加公共访问权限。我们在模块5中使用的模板(third_templ…...
Nginx企业级负载均衡:技术详解系列(17)—— 长连接优化策略与下载服务器高效搭建
你好,我是赵兴晨,97年文科程序员。 今天咱们来聊聊Nginx的两个知识点:Nginx的长连接优化、如何将Nginx配置成下载服务器。 长连接配置详解 在Nginx的配置中,长连接是一个重要的性能优化手段。它允许一个TCP连接上发送多个请求和…...
LabVIEW如何确保步进电机的长期稳定运行
步进电机因其良好的定位精度和控制性,在自动化设备中得到了广泛应用。然而,长期稳定运行对于任何电机系统都是一个重要的挑战。LabVIEW作为一款强大的图形化编程语言,通过其灵活的控制算法和实时监控能力,为步进电机的稳定运行提供…...
vue2 bug 小白求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)
我的vue2项目出现了一个超级恶心的bug 具体流程: 页面a点击a标签->到页面b->页面b用户退出刷新页面->点击浏览器的返回按钮返回上一页 返回页面后页面没有刷新导致用户名还显示这 项目中没有用keep-alive缓存 也在设置了key 尝试了window.removeEventLi…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
