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 绘图自动缩放不起作用的主要内容,如果未能解决你的问题,请参考以下文章