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 FigureCanvas

class 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 data
        x = np.linspace(0, 10, 1000)
        y = np.sin(x) * 1000

        self.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_())

上面的代码创建了一个包含两个区域(红色和蓝色)的图表,表示功率输出为正值或负值。您可以将 xy 数据替换为您的实际数据,并根据需要调整图表的标签和标题。

请运行此代码来查看生成的图表。这个示例假定您使用的是 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 data
    QVector<double> x(1001), y(1001); // initialize with entries 0..1000
    for (int i = 0; i < 1001; ++i) {
        x[i] = i / 50.0 - 10; // x goes from -10 to 10
        y[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 values
    
    QCPGraph *positiveGraph = customPlot->addGraph();
    positiveGraph->setData(x, y);
    positiveGraph->setPen(Qt::NoPen);
    positiveGraph->setBrush(QBrush(QColor(0, 0, 255, 100))); // Blue color for negative values
    
    for (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();
}
  1. 创建一个 qcustomplot.hqcustomplot.cpp 文件,并从 QCustomPlot 官方网站 下载最新版本的 QCustomPlot 代码,然后将其包含在你的项目中。

  2. 在你的项目文件中(例如 CMakeLists.txt*.pro 文件),确保包含 QCustomPlot 的头文件和源文件。例如,在 *.pro 文件中添加以下内容:

    QT += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = your_project_name
    TEMPLATE = app
    
    SOURCES += main.cpp \
        qcustomplot.cpp
    
    HEADERS += qcustomplot.h
    

  3. 使用 Qt Creator 打开项目并运行它。
  4. 这样你就可以看到一个类似于你提供的图像的绘图了。这个示例代码生成了一个正弦波并将其分成两个区域(红色和蓝色),分别表示功率输出的正值和负值。

运行截图:

如果想把上下都填充颜色,且上下颜色区分。我们需要分别为正值和负值创建两个图层,并为其填充颜色分别设置为红色和蓝色。还需要确保数据正确的分开填充,以便能显示正确的颜色。

#include <QApplication>
#include <QMainWindow>
#include "qcustomplot.h"

void setupPlot(QCustomPlot *customPlot) {
    // Create data
    QVector<double> x(1001), y(1001), y_positive(1001), y_negative(1001); // initialize with entries 0..1000
    for (int i = 0; i < 1001; ++i) {
        x[i] = i / 50.0 - 10; // x goes from -10 to 10
        y[i] = qSin(x[i]) * 1000; // let's plot a sine wave
        y_positive[i] = (y[i] > 0) ? y[i] : 0; // Only positive values
        y_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 printsupport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = chart_test
TEMPLATE = app

SOURCES += main.cpp \
    qcustomplot.cpp

HEADERS += 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 的未定义引用问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于在子线程中获取不到HttpServletRequest对象的问题

这篇文章主要分享一下项目里遇到的获取request对象为null的问题&#xff0c;具体是在登录的时候触发的邮箱提醒&#xff0c;获取客户端ip地址&#xff0c;然后通过ip地址定位获取定位信息&#xff0c;从而提示账号在哪里登录。 但是登录却发现获取request对象的时候报错了。 具…

香橙派OrangePI AiPro测评

实物 为AI而生 打开盒子 截图电源开机进入 作为一个AI产品,必须有一个人机交互的界面才行。大家都在跑算法,于是我就开始进行整理着手整理搭建Qt的环境。 1、下载源码 wget https://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz待…

【哈希】闭散列的线性探测和开散列的哈希桶解决哈希冲突(C++两种方法模拟实现哈希表)(2)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 哈希函数与哈希 之 哈希桶解决哈希冲突 的相关内容。 如果看到最后…

使用 Python 和 jieba 实现中文文本中的人名和公司名提取

在处理中文文本时&#xff0c;经常需要从中提取出人名和公司名称。比如在文本分析、信息提取和自然语言处理&#xff08;NLP&#xff09;等领域&#xff0c;这些任务都非常常见。本文将介绍如何使用wxPython创建一个简单的桌面应用程序&#xff0c;从一段中文长文中提取人名和公…

150.二叉树:二叉树的后序遍历(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…

电脑下载了caj却打不开文献?使用CAJ阅读器,支持caj转word

如果电脑下载了CAJ文件却打不开文献&#xff0c;这通常是因为没有安装合适的阅读器。CAJ文件是中国知网的一种专用全文阅读格式&#xff0c;需要使用专门的CAJ阅读器&#xff08;CAJViewer&#xff09;来打开和阅读。 首先&#xff1a;使用CAJ阅读器 请确保你已经正确安装了CA…

【机器学习】解锁AI密码:神经网络算法详解与前沿探索

&#x1f440;传送门&#x1f440; &#x1f50d;引言&#x1f340;神经网络的基本原理&#x1f680;神经网络的结构&#x1f4d5;神经网络的训练过程&#x1f686;神经网络的应用实例&#x1f496;未来发展趋势&#x1f496;结语 &#x1f50d;引言 随着人工智能技术的飞速发…

【python】生成对抗网络(GAN):理论与PlugLink实践

【python】生成对抗网络&#xff08;GAN&#xff09;&#xff1a;理论与PlugLink实践 本文将介绍一种流行的图像生成技术——生成对抗网络&#xff08;GAN&#xff09;&#xff0c;并结合PlugLink平台&#xff0c;展示如何将这一技术应用于实际项目中。简单来说&#xff0c;它…

查看远程桌面连接登录不上服务器,远程桌面连接登录不上服务器是什么情况?怎么解决?

在信息技术领域&#xff0c;远程桌面连接&#xff08;RDP&#xff09;是一种重要的远程管理工具&#xff0c;它允许管理员或用户从远程位置访问和控制服务器或计算机。然而&#xff0c;在实际操作中&#xff0c;远程桌面连接不上服务器的情况时有发生&#xff0c;这通常是由多种…

excel数据丢失怎么办?表格文件恢复的3个方法

Excel作为一个常用的表格文件&#xff0c;我们在工作中经常都需要用到它。最令人崩溃的事就是有时候我们辛辛苦苦用Excel完成了工作&#xff0c;但是突然发现Excel数据丢失。这可怎么办呢&#xff1f;如何找回丢失的Excel数据&#xff1f;下面小编就分享几种恢复办法。 方法一&…

【LLM第7篇】transformer跟bert、gpt、大模型的联系

上一篇讲了transformer的原理&#xff0c;接下来&#xff0c;看看它的衍生物们。 Transformer基本架构 Transformer模型主要由两部分组成&#xff1a;编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;。编码器负责处理输入序列&#xff0c;将其…

如何使用OCR批量提取短剧和电视剧内的字幕?

为什么使用光字符识别 (OCR) 提取视频字幕&#xff1f; 视频字幕提取是将视频中的字幕转换为 SRT 格式文本的过程。传统方法是使用自动语音识别 (ASR) 技术&#xff0c;但对于某些类型的视频&#xff08;例如短剧、电视剧、电影、访谈等节目&#xff09;&#xff0c;由于这类型…

想让企业“火力全开”?找六西格玛培训公司就对了!

在如今的市场环境中&#xff0c;企业面临着不断变化的挑战和无限的可能。要在这场竞争中独领风骚&#xff0c;实现稳健的增长&#xff0c;六西格玛作为一种以数据驱动的管理理论&#xff0c;提供了实际可行的解决方案。六西格玛培训公司&#xff0c;作为这一领域的专家&#xf…

maven聚合工程整合springboot+mybatisplus遇到的问题

前言&#xff08;可以直接跳过看下面解决方法&#xff09; 项目结构 两个module&#xff1a; yema-terminal-boot 是springboot项目&#xff0c;子包有&#xff1a;controller、service、dao 等等。属于经典三层架构。那么&#xff0c;该module可以理解为是一个单体项目&…

如何关闭MySQL凌晨12点自动弹窗?

要关闭 MySQL 在凌晨 12 点自动弹窗的行为&#xff0c;首先需要确定弹窗的具体原因。 打开“任务计划程序”&#xff1a; 按 Win R&#xff0c;输入 taskschd.msc&#xff0c;然后按 Enter。 在左侧导航栏中&#xff0c;选择“任务计划程序库”。 查找与 MySQL 相关的任务&…

嵌入式进阶——矩阵键盘

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 矩阵按键原理图按键状态检测单行按键状态检测多行按键状态检测 状态记录状态优化循环优化 矩阵按键 矩阵键盘是一种常见的数字输入…

【C++题解】1321. 时钟旋转(2)

问题&#xff1a;1321. 时钟旋转&#xff08;2&#xff09; 类型&#xff1a;字符串 题目描述&#xff1a; 时钟从时间&#xff1a;xx:xx&#xff08;xx时xx分&#xff09;&#xff0c;走到时间&#xff1a;xx:xx&#xff08;xx时xx分&#xff09;&#xff0c;时针共旋转了多…

openresty(Nginx) 隐藏 软件包名称 版本号 升级新版本

1 访问错误或者异常的URL 2 修改配置&#xff0c;重新编译&#xff0c;升级 #修改版本等 vim ./bundle/nginx-1.13.6/src/core/nginx.h #define nginx_version 1013006 #define NGINX_VERSION "1.13.6" #define NGINX_VER "openresty/&q…

2024年软件设计师备考复习资料(应用技术)

应用设计&#xff0c;考试时间为120分钟&#xff1b;总共需做5道题&#xff0c;满分75分&#xff08;每题15分&#xff09;。前4题为必答题&#xff0c;最后2题为要求选答一题&#xff08;C或Java&#xff09;&#xff0c;45及格 目录 1. 数据流图&#xff08;需求分析&#…

APM 2.8外置罗盘校准

请注意&#xff1a; GPS不可以飞控带电插拔&#xff0c;带电插拔会产生差分电压&#xff0c;可能会导致GPS模块损坏&#xff0c;无法搜星。不听劝告&#xff0c;后果自负&#xff01; 1.如何接线 GPS有两根线&#xff0c;要插上面图所示的两个接口。同时拔掉旁边的跳线帽&…