Qt QCustomPlot 绘制子轴

抄大神杰作:QCustomplot(五)QCPAxisRect进行子绘图-优快云博客文章浏览阅读5.9k次,点赞7次,收藏60次。文中介绍了QCustomPlot 子绘图需要掌握的类,也就是Matlab中的subplot,最后给出了一个完整的例子。_qcpaxisrecthttps://blog.youkuaiyun.com/weixin_39258979/article/details/122008568

需求来源:试验数据需要多轴对比。之前有过初步尝试​​​​​​​还是大佬们写的好。

实现多Y轴、单X轴、X轴是时间轴、X轴range联动、rect之间的间距是0,每个图上有legend(这里有个疑问,每添加个rect在这个rect上添加graph,再添加legend,第一个rect上就有多个legend,其他rect上就只有一个。);

实现多Y轴、多X轴,x轴不联动。

频谱图,多Y轴,单X轴

关键代码如下,请大佬们多多指正:

//时域图
void MultiAxisWidget::recvRawData(int iRow, QString oStrLabel, QVector<double> adX, QVector<double> adY)
{
    QCPAxisRect* poAxisRect = new QCPAxisRect(ui->plot);
    poAxisRect->setAutoMargins(QCP::msNone);
    poAxisRect->setMargins(QMargins(100, 0, 0, 0));

    ui->plot->plotLayout()->addElement(iCntIndex, 0, poAxisRect);

    QCPAxis* poAxisX = poAxisRect->axis(QCPAxis::atBottom);
    QCPAxis* poAxisY = poAxisRect->axis(QCPAxis::atLeft);

    poAxisX->setVisible(false);

    poAxisY->grid()->setZeroLinePen(QPen(Qt::red));
<think>好的,我需要帮助用户解决如何使用QtQCustomPlot绘制散点图的问题。首先,我要回忆一下QCustomPlot的基本用法,特别是关于散点图的部分。根据用户提供的引用内容,引用[3]提到如何在QCustomPlot中添加曲线,设置颜色和坐标,这可能对绘制散点图有帮助,但需要调整图形类型为散点图。 首先,用户需要一个示例代码,所以我要确保代码结构正确,并且包含必要的步骤:初始化图表、添加数据、设置样式等。QCustomPlot绘制散点图通常是通过创建graph并设置其样式为散点而不是线条。例如,使用setLineStyle来隐藏线条,然后设置ScatterStyle来定义散点的形状和大小。 接下来,我需要检查是否需要处理数据点的添加方式。引用[3]中的代码使用了addGraph()和addData()方法,但那是针对曲线图。对于散点图,可能需要使用类似的方法,但调整样式。例如,使用graph->setScatterStyle来设置点的形状,如圆形、方形等。 另外,用户可能希望动态添加数据点,或者静态显示一组数据。根据引用[2]中的QML示例,动态添加数据可能涉及定时器,但用户的问题可能更关注基础实现。因此,提供一个简单的静态示例会更合适,然后再提及动态更新的方法。 还要注意代码的正确性,例如确保包含必要的头文件,正确初始化QCustomPlot控件,并设置坐标范围。引用[3]中的代码展示了如何设置坐标标签和范围,这些步骤对于散点图同样重要。 可能存在的一个问题是,用户如何将数据添加到散点图中。QCustomPlot通常使用QVector<double>来存储x和y的数据,然后使用setData方法。例如,创建两个QVector<double>变量,填充数据,然后调用graph->setData(x, y)。 另外,需要确保在修改图表后调用ui->customPlot->replot()来更新显示。这在引用[2]和[3]的示例中都有体现。 总结步骤应该是:添加graph,设置散点样式,添加数据,设置坐标,然后调用replot。同时,可能需要隐藏线条,使得只显示散点。例如,设置setLineStyle(QCPGraph::lsNone)来关闭线条显示。 现在,我需要将这些步骤转化为具体的代码示例,并确保语法正确。同时,根据用户的要求,使用中文解释每个步骤的作用,并参考提供的引用内容,但注意引用中的内容是关于曲线图的,需要适当调整以适用于散点图。 最后,生成相关问题,可能涉及动态更新数据、样式自定义或性能优化等方面。</think>以下是如何使用 Qt QCustomPlot 绘制散点图的详细方法和示例代码: ### 实现步骤 1. **添加 QCustomPlot 控件** 在 Qt Designer 中将 `QCustomPlot` 控件拖入窗口(需先从 `QWidget` 提升控件类型)。 2. **初始化散点图参数** 通过 `addGraph()` 创建图形对象,设置散点样式和颜色。 3. **填充数据并更新显示** 使用 `setData()` 加载坐标数据,调用 `replot()` 刷新画布。 ### 示例代码 ```cpp // 在MainWindow构造函数中添加以下代码 #include "qcustomplot.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 创建散点图 ui->customPlot->addGraph(); // 生成示例数据 QVector<double> x(100), y(100); for (int i=0; i<100; ++i) { x[i] = i * 0.1; y[i] = qSin(x[i]) + (QRandomGenerator::global()->generateDouble() - 0.5) * 0.5; } // 设置散点样式 ui->customPlot->graph(0)->setLineStyle(QCPGraph::lsNone); // 隐藏连线 ui->customPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, 5)); // 圆形点,大小5像素 // 加载数据 ui->customPlot->graph(0)->setData(x, y); // 设置坐标范围 ui->customPlot->xAxis->setRange(0, 10); ui->customPlot->yAxis->setRange(-2, 2); // 更新绘图 ui->customPlot->replot(); } ``` ### 关键参数说明 - `setScatterStyle()`:通过 `QCPScatterStyle` 可设置形状(`ssCircle`、`ssSquare` 等)、大小和颜色[^3]。 - `setPen()`:设置散点边框颜色,如 `QPen(Qt::red)`。 - `setBrush()`:设置填充颜色,如 `QBrush(Qt::blue)`。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值