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…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...