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

mik*_*ike 5 c++ qt qwt

QwtPlotBarChart用来绘制直方图.我已经设置了图表,以便条形之间没有间距,我的xBottom轴具有实际的数据范围.

样品在图表上使用a 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;
}
Run Code Online (Sandbox Code Playgroud)

这似乎没问题; 我的标签显示每个箱子的最小值和最大值以及几乎在正确的位置.我试图设置滴答位置如下:

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

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);
Run Code Online (Sandbox Code Playgroud)

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