如何在QtCharts组件的刻度之间绘制柱状图?
解决方案
要实现柱状条位于数值型横轴刻度之间、标签显示在刻度上的效果,只需调整柱状条的偏移量即可,具体步骤如下:
修改要点
- 给
QStackedBarSeries设置barOffset为0.5,让每个柱状条向右偏移半个bar宽度(因你已设置barWidth=1.0,偏移后柱状条会恰好落在两个相邻刻度之间)。 - 保持原代码中x轴的范围和刻度设置不变,确保刻度显示在
0,1,2,3这些位置。
修改后的完整代码
QBarSet *set0 = new QBarSet("Dummy"); int dummy_value = 5; *set0 << dummy_value << dummy_value + 2 << dummy_value + 4; QStackedBarSeries *series = new QStackedBarSeries(); series->append(set0); series->setBarWidth(1.0); // 添加以下一行代码,设置柱状条偏移量 series->setBarOffset(0.5); QChart *chart = new QChart(); chart->addSeries(series); chart->setTitle("Dummy"); QValueAxis* y_axis = new QValueAxis(); chart->addAxis(y_axis, Qt::AlignLeft); y_axis->setRange(0, 10); y_axis->setTickCount(6); y_axis->setLabelFormat("%i"); y_axis->setVisible(true); series->attachAxis(y_axis); QValueAxis* x_axis = new QValueAxis(); chart->addAxis(x_axis, Qt::AlignBottom); x_axis->setRange(0, set0->count()); x_axis->setTickCount(set0->count() + 1); x_axis->setLabelFormat("%d"); x_axis->setVisible(true); series->attachAxis(x_axis); chart->legend()->setVisible(true); chart->legend()->setAlignment(Qt::AlignBottom);
原理说明
默认情况下,QStackedBarSeries的每个柱状条中心对齐横轴的整数刻度位置(如0,1,2),设置barOffset=0.5后,柱状条会向右偏移0.5个单位,中心移动到0.5,1.5,2.5的位置。结合barWidth=1.0,每个柱状条的范围恰好是[0,1]、[1,2]、[2,3],完美落在横轴刻度之间,而横轴标签仍显示在0,1,2,3这些刻度点上,完全符合你的需求。
内容的提问来源于stack exchange,提问作者AcKoucher
相关产品推荐
相关产品推荐

