QwtPlot自定义轴

时间:2011-10-18 19:12:45

标签: plot axis qwt

我想用两个水平轴创建绘图。底轴是线性的,顶轴是非线性的。我有一个转换数据表“底值 - >顶部值”。我发现QwtScaleEngine提供了这个功能。但是我无法使它工作,因为在QwtScaleEngine和QwtScaleDiv的子类中定义了太多记录不完整的函数。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您是否希望两个水平轴有效地覆盖共享轴的两个图,或者只是为了提供第一个水平轴的附加表示(例如,不同的单位)?它可能不是那么相关,我只是想了解你的问题。

我首先建议您查看QwtPlot::updateAxes() documentation。这是我在官方Qwt文档中找到的情节,比例引擎和比例分区之间关系的最佳描述。虽然我认为Qwt没有严重记录,但我认为它缺乏对概念的高级描述。

QwtScaleDiv我看到更多的容器类型,包含轴边界和可能的刻度值。我看不出你有必要继承QwtScaleDiv。

你认为QwtScaleEngine参与了这次转换是正确的,但至少在Qwt 6.1.0中还有更多内容。 QwtScaleEngine支持带有QwtTransform的转化概念(setTransformation())。如果您的转换是一个简单的数学函数,如对数,指数,二次,三次函数等,您应该能够使用QwtPowerTransformQwtLogTransform。如果这些不适用,您可以实施自己的QwtTransform并将其分配给QwtScaleEngine。据我所知,转换必须是双向的,这意味着实现transforminvTransform。根据我的经验,它还必须转换与缩放引擎相关联的轴相关的所有绘图项的值,包括网格线,区域等。我没有尝试在其他比例引擎上使用转换而不是默认的QwtLinearScaleEngine,但这很有效。这是一个强大的概念。另外,请查看SVN playground(6.1.0)中的scaleengine示例。