灯芯的狗 2024-05-18 09:28 采纳率: 60%
浏览 125
已结题

Qcustomplot缩小曲线形状问题

img


这是画出来的,然后我现在用缩小,稍微一缩小就会变成这个样子

img


是我的x值左右间距太小导致的这种情况吗? 问问大家谢谢!

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-18 09:28
    关注

    引自免费微信小程序:皆我百晓生

    在处理QCustomPlot中的曲线缩放问题时,有几个可能的原因会导致曲线形状变得不理想。首先,确认X轴的范围是否合适,以及数据点之间的间隔。其次,检查曲线插值方式是否恰当。如果你的数据点之间差距较大,可能会导致曲线在缩放后看起来不连续。

    这里有一个基本的解决思路,我会提供一个C++示例代码来调整QCustomPlot的缩放行为,并确保在缩放过程中曲线保持良好的形状。我们将使用QCPAxisRect::setRangeSteps方法来设置X轴的步长,这有助于控制轴上刻度的分布,从而影响曲线的外观。

    #include <QtWidgets>
    #include "qcustomplot.h"
    
    class MainWindow : public QMainWindow {
    public:
        MainWindow(QWidget *parent = nullptr) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
            initChart();
        }
    
    private:
        void initChart()
        {
            QCustomPlot *chart = new QCustomPlot(ui->centralWidget);
    
            // 设置曲线数据
            QVector<double> xData = {10, 20, 30};
            QVector<double> yData = {-10, 10, 20};
    
            QLineSeries *lineSeries = new QLineSeries();
            for (int i = 0; i < xData.size(); ++i) {
                lineSeries->append(xData[i], yData[i]);
            }
            chart->addGraph(lineSeries);
    
            // 设置X轴范围
            chart->xAxis->setRange(0, 40); // 根据实际需求调整范围
            chart->yAxis->setRange(-20, 20); // 根据实际需求调整范围
    
            // 设置X轴步长
            chart->xAxis->setRangeSteps(QCPAxis::AutoRangeStepMode::FixedNumberOfSteps, 5); // 尝试不同的步数看效果如何
            chart->xAxis->setLabel("X Axis");
    
            // 设置Y轴标签
            chart->yAxis->setLabel("Y Axis");
    
            // 显示网格
            chart->axisRect()->grid()->setVisible(true);
            chart->axisRect()->grid()->setSubGridVisible(true);
            chart->axisRect()->grid()->setPen(Qt::lightGray);
    
            // 设置图表标题
            chart->setTitle("My Chart");
        }
    
    private:
        Ui::MainWindow *ui;
    };
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }
    
    

    在这个例子中,我们创建了一个简单的QCustomPlot窗口并添加了一条线性数据系列。设置了X轴和Y轴的范围,并且为X轴指定了固定的步长。你可以根据实际情况调整这些值,比如X轴的范围、步长等,以获得更满意的结果。

    如果你的问题依然存在,可能需要进一步分析你的具体数据集和应用场景,以便找到更适合的解决方案。你可以尝试调整步长值,观察曲线变化,看看是否有改善。如果还有疑问,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月18日
  • 创建了问题 5月18日