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

Google Charts中如何按天分组柱状图并让同日期数据在X轴相邻显示?

解决Google Charts柱状图相同日期数据分组显示的问题

没问题!要让相同日期的多个数据在X轴上相邻显示(也就是同一日期标签下并排展示多个柱子),核心是调整数据结构,让Google Charts把这些同日期的数值识别为独立的数据系列,而非同一系列下的重复标签。下面分两种场景给出具体方案:

一、静态数据手动调整结构

如果你的数据是固定的,直接把同一日期的多个数值拆分成不同的列(对应不同数据系列)即可:

var data = google.visualization.arrayToDataTable([
  ['Day', 'Amount 1', 'Amount 2'], // 新增系列列,可自定义名称
  ['Mon', 4, 6],                   // Mon的两个数值分别对应不同系列
  ['Tue', 3, null],                // 无对应数值的位置填null占位
  ['Wed', 3, null]
]);

这样渲染出的柱状图,Mon位置会有两个并排的柱子,Tue和Wed则仅显示单个柱子,完全符合分组展示的需求。

二、动态数据自动分组(适配数据不固定场景)

如果你的数据是动态获取的(比如从后端接口返回),可以先通过JavaScript预处理数据,将同一日期的多值结构转换为Google Charts支持的多列格式:

// 假设原始数据是你提供的格式
const rawData = [
  ['Day', 'Amount'],
  ['Mon', 4],
  ['Mon', 6],
  ['Tue', 3],
  ['Wed', 3]
];

// 1. 整理同一日期的所有数值
const dayValueMap = {};
rawData.slice(1).forEach(row => {
  const day = row[0];
  const amount = row[1];
  if (!dayValueMap[day]) {
    dayValueMap[day] = [];
  }
  dayValueMap[day].push(amount);
});

// 2. 确定需要多少个系列列
const maxSeriesNum = Math.max(...Object.values(dayValueMap).map(v => v.length));
const headers = ['Day'];
for (let i = 1; i <= maxSeriesNum; i++) {
  headers.push(`Amount ${i}`); // 可根据业务自定义系列名称
}

// 3. 构建适配Google Charts的新数据
const formattedData = [headers];
Object.keys(dayValueMap).forEach(day => {
  const row = [day];
  for (let i = 0; i < maxSeriesNum; i++) {
    row.push(dayValueMap[day][i] || null);
  }
  formattedData.push(row);
});

// 4. 传入Google Charts生成表格
var data = google.visualization.arrayToDataTable(formattedData);

三、额外注意事项

确保初始化图表时没有设置isStacked: true——这个配置会让柱子堆叠而非并排,默认情况下Google Charts的Column Chart就是分组展示多系列数据的。

内容的提问来源于stack exchange,提问作者Tobbelowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:28