【问题标题】:Qwt plot auto scale not workingQwt 绘图自动缩放不起作用
【发布时间】:2013-02-04 10:42:44
【问题描述】:

我正在尝试使用 qt 4.8 和 qwt 6 绘制一些数据,但我的曲线没有按比例缩放 (1)。

这是我将曲线附加到绘图的方式:

curves[moduleIndex][channelIndex]->setSamples(samples, data);
curves[moduleIndex][channelIndex]->attach(plots[moduleIndex][channelIndex]);

samples 和 data 是 QVectors 并且 samples.size() 等于 data.size()

plots[moduleIndex][channelIndex]->axisAutoScale(QwtPlot::xBottom) 返回 true,因此启用了 autoScale

所以我错过了什么?

更新:我认为问题是因为禁用了轴

plots[i][j]->enableAxis(QwtPlot::yLeft, false);
plots[i][j]->enableAxis(QwtPlot::xBottom, false);

但是我已经注释掉了它并没有帮助。

【问题讨论】:

  • 这实际上是它的工作原理。它试图在刻度的末尾加上一个漂亮的四舍五入的数字。当我遇到同样的问题时,我只是禁用了 x 轴的自动缩放并使用“setAxisScale”手动设置它。或者你可以尝试用 QwtScaleEngine 类做一些事情,也许实现你自己的......

标签: c++ qt qwt


【解决方案1】:

我相信“自动缩放”已经在起作用。但是为了使轴看起来不错,它需要一个四舍五入的最大值,这会导致最后出现间隙。 QwtPlot 的比例由 QwtScaleEngine 管理。您可以使用 QwtPlot::axisScaleEngine(...) 获得指向默认 scaleEngine 绘图的指针。将Floating 属性设置为true 将消除此差距,并使您的数据适合边界。参见文档:http://qwt.sourceforge.net/class_qwt_scale_engine.html

例如:

plot.axisScaleEngine(QwtPlot::xBottom)->setAttribute(QwtScaleEngine::Floating,true);

【讨论】:

  • 请添加一些解释性文字以使其成为更有用的答案。
  • 提到的QwtScaleEngine 的文档还说,当设置Floating 属性时,可以使用setMargins() 设置最大/最小和边界之间的距离。所以如果设置了这个属性后,差距还是很大,可以用这个setter来缩小。
  • 我尝试将数据从 0 更改为 1019(x 和 y)。如果我什么都不设置;比例设置为“从 0 到 1200”。当我将浮动属性设置为 true 时,间隙消失并且数据适合轴。所以它对我有用。但是我从 setMargins() 了解到的是;它设置了最小间隙。因为如果我为 xAxis 调用 setMargins(100,0),左边会出现一个间隙。你能告诉我你是如何测试这个的吗?
  • 阅读我上面的提示。比例引擎负责计算比例。刻度末端和画布边界之间的间隙是由于绘图布局。修改请看QqwtPlotLayout的API。
【解决方案2】:

当设置 QwtScaleEngine::Floating + QwtPlotLayout::setAlignCanvasToScales( true ) 时,画布应该与曲线的边界完美对齐。

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多