Qwt 绘图自动缩放不起作用

Posted

技术标签:

【中文标题】Qwt 绘图自动缩放不起作用【英文标题】:Qwt plot auto scale not working 【发布时间】: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 类做一些事情,也许实现你自己的...... 【参考方案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 ) 时,画布应该与曲线的边界完美对齐。

【讨论】:

以上是关于Qwt 绘图自动缩放不起作用的主要内容,如果未能解决你的问题,请参考以下文章

自动布局:缩放填充不起作用

使用 NavigationToolbar 进行缩放在使用 pyqt 的 matplotlib 中不起作用

kubernetes自动缩放不起作用

GAE Java 自动缩放最小空闲实例不起作用?

AWS EC2 实例终止保护在自动缩放 IN 下不起作用

水平 pod 自动缩放不起作用:`无法获取资源 cpu 的指标:没有从 heapster 返回的指标`