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