You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:22:39