QwtPlotBarChart - 如何获得匹配条形中点的标签

时间:2017-12-20 11:31:34

标签: c++ qt qwt

我正在使用QwtPlotBarChart绘制直方图。我已经设置了图表,以便条形之间的间距为零,而我的 xBottom轴具有实际的数据范围。

使用QVector QPointF在图表上设置样本,其中x值对应于分档的中点。

悬停在条形图上的QwtPlotPicker显示它们在实际开始和结束时开始和结束。

但是,我无法获得标签绘制的标记,以便沿x轴显示在正确的位置。我正在使用自定义scaledraw,类似于distrowatch示例。我还有一些参数,即数据范围的最小值和bin大小。我的标签索引代码如下所示:

virtual QwtText label( double value ) const
{
    QwtText lbl;

    //const int index = qRound( value );
    const int index = (int)(value-_min_val)/_bin_size;
    if ( index >= 0 && index < d_labels.size() )
    {
        lbl = d_labels[ index ];
    }

    return lbl;
}

这似乎没问题;我的标签显示每个bin的最小值和最大值以及 near 在正确的位置。 我试图按如下方式设置刻度位置:

QwtScaleDiv div = _plot->axisScaleDiv(QwtPlot::xBottom);
div.setTicks(QwtScaleDiv::MajorTick, x_data.toList());
_plot->setAxisScaleDiv(QwtPlot::xBottom, div);

此处x_data是用于绘制数据的bin中点的向量。轴范围使用:

设置
double half_bin = bin_size / 2.0;
_plot->setAxisScale(QwtPlot::xBottom, x_data.first() - half_bin, x_data.last() + half_bin, bin_size);

我缺少什么想法?根据箱的数量,刻度线(以及随后的标签)偶尔会与箱的中点(或至少大部分)对齐,但随着我更改箱数,刻度将变得或多或少偏离垃圾箱的中心。

0 个答案:

没有答案