QCustomPlot 简单使用(三)

本文介绍如何使用QCPItemTracer类在QCustomPlot的折线图中对超过阈值的数据点进行标记,包括设置标记样式、颜色和大小,并提供清除标记的方法。
部署运行你感兴趣的模型镜像

  绘制折线图时,有时候数据需要做一些标记,如下图所示效果,用到了 QCPItemTracer 类记录备忘

 

void Storeplot::PlotSetTag(QCPGraph *Graph, double threshold, QVector<QCPItemTracer *> *TagVector)
{
    QSharedPointer<QCPGraphDataContainer> tmpContainer;
    tmpContainer = Graph->data();
    int low = 0, high = tmpContainer->size();
    double x,y;
    qDebug("start TagVector.size()=%d", TagVector->size());
    for(low = 0; low < high; low++)
    {
        y = (tmpContainer->constBegin() + low)->mainValue();

        if(threshold < y)
        {
            QCPItemTracer *tempTracer = new QCPItemTracer(ui->plot);
            tempTracer->setGraph(Graph);
            tempTracer->setInterpolating(true);
            tempTracer->setStyle(QCPItemTracer::tsCircle);
            tempTracer->setPen(QPen(Qt::red));
            tempTracer->setBrush(Qt::red);
            tempTracer->setSize(7);
            tempTracer->setGraphKey((tmpContainer->constBegin() + low)->mainKey());
            TagVector->append(tempTracer);
            //qDebug("i =%d y =%f %f", low, y, (tmpContainer->constBegin() + low)->mainKey());
        }
    }
    qDebug("TagVector.size()=%d", TagVector->size());
    qDebug("high =%d threshold=%f", high, threshold);
    ui->plot->replot();
}
void Storeplot::PlotClearTag(QVector<QCPItemTracer *> *TagVector)
{
    qDebug("PlotClearTag TagVector.size()=%d", TagVector->size());
    for(int i = 0; i < TagVector->size(); i++)
    {
        QCPItemTracer *tempTracer = TagVector->at(i);
        tempTracer->setGraph(0);
        ui->plot->removeItem(tempTracer);
        //delete tempTracer;
    }
    TagVector->clear();
    qDebug("PlotClearTag TagVector.size()=%d", TagVector->size());
    ui->plot->replot();
}

 

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### QCustomPlot 的 3D 图表支持 QCustomPlot 是一款轻量级的 C++ 绘图库,主要用于二维数据可视化。然而,在其官方文档和支持范围内,并未提供原生的维图表功能[^1]。尽管如此,开发者可以通过扩展或与其他工具结合来实现部分伪 3D 效果。 #### 使用 QCustomPlot 实现 3D 图表的方式 虽然 QCustomPlot 不直接支持真正的 3D 图形渲染,但可以借助以下几种方法模拟或间接实现: 1. **通过多层叠加实现伪 3D 效果** 利用 QCustomPlot 提供的分层机制(`QCPAxisRect`),可以在同一绘图区域中创建多个坐标轴并分别绘制不同的平面视图,从而形成一种立体感的效果[^2]。 2. **自定义绘图逻辑** 开发者可以直接修改 `qcustomplot.cpp` 和 `qcustomplot.h` 文件中的绘图函数,加入透视变换或其他几何计算逻辑,以手动实现简单的 3D 渲染效果。这种方法需要较强的数学背景和编程能力[^3]。 3. **结合其他 3D 库** 如果需要更复杂的 3D 可视化功能,推荐将 QCustomPlot 与专门处理 3D 数据可视化的第方库(如 Qt Data Visualization 或 OpenGL)相结合。这种方式能够充分利用各自的优势,既保留 QCustomPlot 的易用性和灵活性,又获得强大的 3D 支持。 以下是基于上述思路的一个简单示例代码片段,展示如何利用 QCustomPlot 创建带有层次感的伪 3D 折线图: ```cpp #include "qcustomplot.h" void createPseudo3DChart(QCustomPlot *customPlot) { // 添加第一个数据序列 (底层) customPlot->addGraph(); QVector<double> x1, y1; for (double i = 0; i < 10; ++i) { x1 << i; y1 << qSin(i); } customPlot->graph(0)->setData(x1, y1); // 设置样式 customPlot->graph(0)->setPen(QPen(Qt::blue)); customPlot->graph(0)->setName("Layer 1"); // 添加第二个数据序列 (中间层) customPlot->addGraph(); QVector<double> x2, y2; for (double i = 0; i < 10; ++i) { x2 << i + 0.5; // 偏移 X 轴位置 y2 << qCos(i); } customPlot->graph(1)->setData(x2, y2); // 设置样式 customPlot->graph(1)->setPen(QPen(Qt::red)); customPlot->graph(1)->setName("Layer 2"); // 配置坐标轴范围 customPlot->xAxis->setRange(-1, 11); customPlot->yAxis->setRange(-1.5, 1.5); // 显示图例 customPlot->legend->setVisible(true); } ``` 此代码展示了两组不同偏移的数据序列在同一张图表上的呈现方式,这种视觉差异可被用来模仿深度维度的变化。 #### 注意事项 - 上述方法仅适用于较为简单的场景;对于复杂的真实 3D 场景,则需考虑采用更适合的专业解决方案。 - 修改核心源码可能会影响未来版本升级兼容性,请谨慎操作。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值