Qwt Plot 是否支持设置多个不同刻度的Y轴?
Qwt Plot双Y轴多曲线实现方案
该需求完全可以实现,之前配置setAxes()后所有曲线仅关联左Y轴,核心原因是Qwt默认仅启用左Y轴(QwtPlot::yLeft)和底部X轴(QwtPlot::xBottom),右侧Y轴默认处于禁用状态,哪怕给曲线绑定了右轴也不会生效。完整实现步骤如下:
- 启用右侧Y轴
// 启用右侧Y轴并设置为可见 qwtPlot->enableAxis(QwtPlot::yRight);
- 为不同曲线绑定对应坐标轴
// 数值区间-4.5~4.5的曲线绑定左Y轴 smallRangeCurve->setAxes(QwtPlot::xBottom, QwtPlot::yLeft); // 数值区间0~10000的曲线绑定右Y轴 largeRangeCurve->setAxes(QwtPlot::xBottom, QwtPlot::yRight);
- 将曲线附加到绘图实例
smallRangeCurve->attach(qwtPlot); largeRangeCurve->attach(qwtPlot);
- 配置双轴自动刻度调整
每次更新曲线数据后,分别调用两个Y轴的自动缩放接口,即可实现独立刻度适配:
qwtPlot->setAxisAutoScale(QwtPlot::yLeft); qwtPlot->setAxisAutoScale(QwtPlot::yRight); // 刷新绘图 qwtPlot->replot();
- 配置双轴独立缩放功能
Qwt默认的缩放器仅作用于左Y轴,需要额外给右Y轴绑定缩放器即可实现双轴独立缩放,示例如下(左键控制左轴缩放,右键控制右轴缩放):
// 左轴缩放器 QwtPlotMagnifier *magnifierLeft = new QwtPlotMagnifier(qwtPlot->canvas()); magnifierLeft->setAxisEnabled(QwtPlot::yLeft, true); magnifierLeft->setAxisEnabled(QwtPlot::yRight, false); magnifierLeft->setMouseButton(Qt::LeftButton); // 右轴缩放器 QwtPlotMagnifier *magnifierRight = new QwtPlotMagnifier(qwtPlot->canvas()); magnifierRight->setAxisEnabled(QwtPlot::yLeft, false); magnifierRight->setAxisEnabled(QwtPlot::yRight, true); magnifierRight->setMouseButton(Qt::RightButton);
如果需要两个Y轴同步缩放,只需要重写缩放事件的槽函数,在左轴缩放时同步计算右轴的缩放比例更新即可。
内容的提问来源于stack exchange,提问作者jules
相关产品推荐
相关产品推荐

