当前位置: 首页 > news >正文

利用qcustomplot绘制曲线图

本文详细介绍了qcustomplot绘制曲线图的流程,一段代码一段代码运行看效果。通过阅读本文,读者可以了解到每一项怎么用代码进行配置,进而实现自己想要的图表效果。(本文只针对曲线图)

1 最简单的图形(入门)

  • 头文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "qcustomplot.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();public:void paintLine(QCustomPlot *customPlot);private:Ui::Widget *ui;
};
#endif // WIDGET_H
  • 源文件
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);paintLine(ui->lineWidget);}Widget::~Widget()
{delete ui;
}void Widget::paintLine(QCustomPlot *customPlot)
{QVector<double> x(101), y(101);for (int i = 0; i < x.size(); i++){x[i] = i / 50.0 - 1;    // x从-1 到 1y[i] = x[i] * x[i];   // 二次函数}customPlot->addGraph();    // 添加一幅折线图customPlot->graph(0)->setData(x, y);    // 为曲线图添加数据 注意这个方法只能是double类型 库内就是这样声明与定义的customPlot->graph(0)->setName("y=x^{2}");// 设置x与y坐标轴的范围customPlot->xAxis->setRange(-1, 1);customPlot->yAxis->setRange(0, 1);// 设置x与y坐标轴的标签customPlot->xAxis->setLabel("x");customPlot->yAxis->setLabel("y");// 显示图例customPlot->legend->setVisible(true);
}
  • 运行效果

在这里插入图片描述

2 美化一下

美化之前,先有几个名词声明一下

  • 轴线
  • 轴刻度线(长的刻度线)
  • 轴子刻度线(短的刻度线)
  • 轴刻度值
  • 轴标签

2.1 设置背景颜色、轴、刻度线、刻度值、刻度标签

    QLinearGradient plotGradient;plotGradient.setStart(0, 0);plotGradient.setFinalStop(0, 350);plotGradient.setColorAt(0, QColor(80, 80, 80));plotGradient.setColorAt(1, QColor(50, 50, 50));customPlot->setBackground(plotGradient);      // 设置背景颜色

在这里插入图片描述

customPlot->axisRect()->setBackground(Qt::red);

在这里插入图片描述

// 设置轴风格customPlot->xAxis->setBasePen(QPen(Qt::white, 1));

在这里插入图片描述

customPlot->xAxis->setTickPen(QPen(Qt::white, 1));    // 轴刻度线和画笔

在这里插入图片描述

注意这两张图像的区别,非常微小的区别

上边这张是设置轴,下边这张是设置轴刻度

customPlot->xAxis->setSubTickPen(QPen(Qt::white, 1));  // 轴子刻度线的画笔

在这里插入图片描述
发现区别了吗?发现具体配置的效果显示在哪了吗?如果没有发现,请仔细对比。

customPlot->xAxis->setTickLabelColor(Qt::white);  // 设置轴刻度颜色

在这里插入图片描述

    customPlot->xAxis->setLabel("标签");                  // 只有设置了标签,轴标签颜色才会显示customPlot->xAxis->setLabelColor(Qt::white);          // 设置轴标签颜色

在这里插入图片描述

    customPlot->xAxis->setTickLengthIn(133);   // 为了效果明显 将值设置的大一点,原来是这个效果 轴线内刻度的长度

在这里插入图片描述

customPlot->xAxis->setTickLengthOut(125);    // 为了效果明显 将值设置的大一点,原来是这个效果 轴线外刻度的长度

在这里插入图片描述

customPlot->xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow); // 设置轴结束的箭头

在这里插入图片描述

	// 设置网格的风格customPlot->xAxis->grid()->setPen(QPen(Qt::red, 1, Qt::DotLine));

在这里插入图片描述

    // 设置水平线customPlot->yAxis->grid()->setPen(QPen(Qt::yellow, 1, Qt::DotLine));

在这里插入图片描述

    // 设置子刻度线customPlot->xAxis->grid()->setSubGridVisible(true);customPlot->xAxis->grid()->setSubGridPen(QPen(Qt::blue, 1, Qt::DotLine));

在这里插入图片描述

 	customPlot->yAxis->grid()->setSubGridVisible(true);customPlot->yAxis->grid()->setSubGridPen(QPen(Qt::green, 1, Qt::DashLine));

在这里插入图片描述

    // 设置刻度为0时的网格线的画笔customPlot->xAxis->grid()->setZeroLinePen(QPen(Qt::red, 3));customPlot->yAxis->grid()->setZeroLinePen(QPen(Qt::red));

在这里插入图片描述

至此,有关图像轴的设置就介绍完了

2.2 线型

利用官网的例子进行介绍

    // 图表的风格QPen pen;// 存放曲线的风格名称QStringList lineNames;lineNames << "lsNone" << "lsLine" << "lsStepLeft" << "lsStepRight" << "lsStrepCenter" << "lsImpulse";for(int i = 0; i < lineNames.size(); i++){customPlot->addGraph();pen.setColor(QColor(qSin(i * 1 + 1.2) * 80 + 80, qSin(i * 0.3) * 80 + 80, qSin(i * 0.3 + 1.5) * 80 + 80));customPlot->graph()->setPen(pen);customPlot->graph()->setName(lineNames.at(i));customPlot->graph()->setLineStyle((QCPGraph::LineStyle)i);customPlot->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 6));QVector<double> x(15), y(15);for (int j = 0; j < x.size(); j++){x[j] = j / 15.0 * 5 * 3.14 + 0.01;y[j] = 7 * qSin(x[j]) / x[j]  - (i - QCPGraph::lsNone) * 5 + (QCPGraph::lsImpulse) * 5 + 2;}customPlot->graph()->setData(x, y);customPlot->graph()->rescaleAxes(true);}

在这里插入图片描述

本文参考:

https://blog.csdn.net/qq10097355/article/details/104845706https://www.qcustomplot.com/  官网
http://www.lqws.cn/news/215623.html

相关文章:

  • 智慧零售管理中的客流统计与属性分析
  • 前端开发者常用网站
  • 基于51单片机的光强调节LED亮度
  • 关于脏读,幻读,可重复读的学习
  • python训练营打卡第47天
  • CAD2025安装教程与资源下载
  • 湖北理元理律师事务所:债务咨询中的心理支持技术应用
  • cv2.stereoRectify中R1, R2, P1, P2, Q中每一个分量的物理意义
  • SMC自修改代码一
  • MCP详解及协议的使用(python版本和Node版本)
  • FreeRTOS事件组-笔记
  • AI大神吴恩达-提示词课程笔记
  • 【Go语言基础【14】】defer与异常处理(panic、recover)
  • 深入剖析MySQL存储架构,索引结构,日志机制,事务提交流程
  • 【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
  • KTO: Model Alignment as Prospect Theoretic Optimization
  • [总结篇]个人网站
  • XGBoost时间序列预测之-未来销量的预测
  • 【氧化镓】HTFB应力对β - Ga2O3 SBD的影响
  • 【JavaSE】泛型学习笔记
  • GIC700组件
  • 什么是预训练?深入解读大模型AI的“高考集训”
  • Python抽象基类实战:构建广告轮播框架ADAM的核心逻辑
  • 数据类型-整型
  • python怎么读shape文件?
  • Java 并发编程系列(上篇):多线程深入解析
  • 高级数据结构与算法期末考试速成记录2
  • 获取环境变量的两种方式:getenv()和environ
  • 【C/C++】STL实现版本为什么比手写版本高?
  • SWE-Dev:开启自主特征驱动软件开发新纪元,重新定义大模型编码能力边界