关于QCustomPlot的rescaleAxes()和setRange()函数

rescaleAxes()函数在官方文档的说明
翻译:
重新缩放与此绘图仪关联的键轴和值轴,以包含所有显示的数据,从而使整个绘图仪可见。如果轴的缩放是对数的,则RescaleAxis将确保不会重新缩放到非法范围,即包含不同符号和/或零的范围。相反,它将保留在当前符号域中,并忽略位于该域之外的绘图仪的所有部分。

onlyEnlarge确保范围只会扩大,而不会缩小。因此,可以通过多次调用rescaleAxes来整体显示多个绘图表,其中第一次调用仅将“大”设置为false(默认设置),随后所有调用都设置为true。

大概的意思是保证图形比较合理地显示

setRange()函数
setRange()函数在官方中有三个,还有两个请自行在文档中查找。

//这个函数是用来设置轴范围的下限和上限。
void QCPAxis::setRange (double lower, double upper )

官网的例子:

 QCustomPlot* customPlot  = ui->widget;
    // add two new graphs and set their look:
    customPlot->addGraph();
    customPlot->graph(0)->setPen(QPen(Qt::blue)); // line color blue for first graph
    customPlot->graph(0)->setBrush(QBrush(QColor(0, 0, 255, 20))); // first graph will be filled with translucent blue

    customPlot->addGraph();
    customPlot->graph(1)->setPen(QPen(Qt::red)); // line color red for second graph
    // generate some points of data (y0 for first, y1 for second graph):
    QVector<double> x(251), y0(251), y1(251);
    for (int i=0; i<251; ++i)
    {
      x[i] = i;
      y0[i] = qExp(-i/150.0)*qCos(i/10.0); // exponentially decaying cosine
      y1[i] = qExp(-i/150.0);              // exponential envelope
    }
    // configure right and top axis to show ticks but no labels:
    // (see QCPAxisRect::setupFullAxesBox for a quicker method to do this)
    //customPlot->axisRect()->setupFullAxesBox(false);//四边安装轴并显示
    customPlot->xAxis2->setVisible(true);
    customPlot->xAxis2->setTickLabels(false);
    customPlot->yAxis2->setVisible(true);
    customPlot->yAxis2->setTickLabels(false);
    // make left and bottom axes always transfer their ranges to right and top axes:
    connect(customPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), customPlot->xAxis2, SLOT(setRange(QCPRange)));
    connect(customPlot->yAxis, SIGNAL(rangeChanged(QCPRange)), customPlot->yAxis2, SLOT(setRange(QCPRange)));
    // pass data points to graphs:
    customPlot->graph(0)->setData(x, y0);
    customPlot->graph(1)->setData(x, y1);
    // let the ranges scale themselves so graph 0 fits perfectly in the visible area:
    customPlot->graph(0)->rescaleAxes();
    // same thing for graph 1, but only enlarge ranges (in case graph 1 is smaller than graph 0):
    customPlot->graph(1)->rescaleAxes(true);
    //customPlot->xAxis->setRange(0,250);
//    customPlot->yAxis->setRange(-0.8,1);
    // Note: we could have also just called customPlot->rescaleAxes(); instead
    // Allow user to drag axis ranges with mouse, zoom with mouse wheel and select graphs by clicking:
    customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);

正常运行
在这里插入图片描述
把如下代码注释掉:
在这里插入图片描述
运行时这样子的
在这里插入图片描述
加入以下代码限制轴的大小:
在这里插入图片描述
运行结果如下:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: qcustomplot setrange是一个Qt库中的一个函数,用于设置QCustomPlot对象的x和y轴的范围。具体而言,它可以设置x轴和y轴的最小值和最大值,或通过传递一个QCPRange对象来设置范围。 ### 回答2: QCustomPlot是一款强大的功能图表库,它提供了大量的绘图功能和样式,可以帮助我们快速地完成各种复杂的绘图任务。其中setRange函数就是设置坐标轴范围的函数setRange函数是在QCPAxis类中定义的一个重要函数,它可以用来设置坐标轴的范围。在使用它之前,我们需要先获取到要设置的坐标轴对象,通常是通过调用QCustomPlot对象的axisRect()函数来获取。 一般而言,setRange函数的形参是两个double类型的值,分别表示坐标轴范围的起始与结束位置。对于一般的二维平面坐标系,通常会定义两个坐标轴:x轴和y轴。因此,我们需要调用两次setRange函数来设置它们的范围。 例如,我们可以通过以下代码来设置x轴的范围: ```cpp // 获取x轴对象 QCPAxis* xAxis = customPlot->xAxis; // 设置x轴范围 xAxis->setRange(0, 10); // 范围为0~10 ``` 同样地,我们也可以设置y轴的范围: ```cpp // 获取y轴对象 QCPAxis* yAxis = customPlot->yAxis; // 设置y轴范围 yAxis->setRange(-5, 5); // 范围为-5~5 ``` 除了直接指定范围外,setRange还支持自适应范围设置。它会根据实际绘制的数据来自动调整坐标轴的范围,以保证数据能够充分地显示在坐标系中。 例如,我们可以通过以下代码来设置x轴的自适应范围: ```cpp // 获取x轴对象 QCPAxis* xAxis = customPlot->xAxis; // 设置x轴自适应范围 xAxis->setRange(QCP::autoRange); // 设置为自适应范围 ``` 同样地,我们也可以设置y轴的自适应范围: ```cpp // 获取y轴对象 QCPAxis* yAxis = customPlot->yAxis; // 设置y轴自适应范围 yAxis->setRange(QCP::autoRange); // 设置为自适应范围 ``` 在使用setRange函数时,我们还可以通过第三个bool类型的形参来控制是否强制重新绘制坐标轴。当数据范围变化较小时,我们可以选择忽略坐标轴的重新绘制,以提高绘图效率。例如: ```cpp // 获取x轴对象 QCPAxis* xAxis = customPlot->xAxis; // 设置x轴范围,且不强制重新绘制 xAxis->setRange(0, 10, false); // 范围为0~10,但不强制重新绘制 ``` 总之,setRange函数QCustomPlot库中一个功能强大又灵活的函数,它提供了多种设置坐标轴范围的方式,可以帮助我们快速地完成各种复杂的绘图任务。对于那些需要频繁更新数据的绘图场景,我们还可以通过使用其重载版本中的第三个bool类型的形参来提高绘图效率。 ### 回答3: QCustomPlot 是一款基于 Qt 的 C++ 绘图库,可以用于各种类型的科学、技术和商业绘图。在使用 QCustomPlot 进行绘图时,常用到的一个函数setRange(),它是用来设置坐标轴范围的。 setRange() 函数接受两个参数,分别是 xMin、xMax 或 yMin、yMax。其中,xMin 和 xMax 表示 x 轴的最小值和最大值,yMin 和 yMax 表示 y 轴的最小值和最大值。可以通过调用 QCPAxis 对象的 range 函数来分别获取当前的坐标轴范围。 在使用 setRange() 函数时,我们需要注意以下几点: 1. setRange() 并不会自动更新坐标轴的缩放因子和标签。如果需要更新这些信息,需要手动调用 replot() 函数。 2. 如果设置的范围不合理,比如 xMin 大于 xMax,或者 yMin 等于 yMax,那么程序会抛出异常。 3. 在使用 setRange() 函数设置坐标轴范围时,应该根据所绘制的图形数据进行合理的设置,以保证绘图的可视化效果和准确性。 4. 使用 setRange() 函数还可以设置 Qt::AspectRatioMode 枚举类型的参数,该参数用于控制缩放比例,以适应绘图区域的大小。 总的来说,setRange() 函数QCustomPlot 绘图库中一个非常常用的函数,它可以帮助我们设置坐标轴的范围,从而控制绘图的可视化效果和准确性。在使用该函数时,我们需要注意参数的合理性,以及手动更新缩放因子和标签的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值