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

D3堆叠条形图部分条形不显示、超出Y轴、位置偏左问题如何修复

问题修复方案

1. 分类渲染缺失、条形超出Y轴、第二组数据不显示问题

原因

  • Y轴定义域设置错误:堆叠条形图的Y轴上限需要取所有分类的堆叠总高度的最大值,当前代码取的是单个数据项的最大值,堆叠后总高度超过上限,就会出现条形超出Y轴、小数值分类被挤出可视区域的问题
  • E分类数值和其他分类差值超过4个数量级,计算出的条形高度小于1px,浏览器默认不渲染
  • 冗余代码无意义:定义的cost数组没有参与堆叠计算、坐标轴值域计算,完全无效
  • x轴值域设置不合理:自定义xScaleRange = 数据条数*120,没有使用预设的画布宽度width,容易出现坐标计算偏差

修复代码

// 1. 删除冗余的cost数组相关代码
// 2. 替换原y.domain的代码,计算每个分类的总和取最大值作为Y轴上限
y.domain([0, d3.max(data, d => keys.reduce((sum, key) => sum + d[key], 0))]).nice()
// 3. 替换x轴scale的range配置,用预设的width作为x轴总宽度
const x = d3.scaleBand()
         .rangeRound([0, width])
         .padding(0.1)
// 4. 可选:增加最小高度判断,保证极小值分类可见
.attr("height", d => {
  const h = y(d[0]) - y(d[1])
  return h < 1 ? 1 : h
})

2. 固定宽度条形不居中问题

原因

scaleBand返回的x坐标是每个分类区块的左边缘坐标,固定条形宽度为25px后,需要手动计算偏移量,让条形在分类区块内居中。

修复代码

替换rect的x属性赋值逻辑:

.attr("x", d => {
  return x(d.data.category) + (x.bandwidth() - 25) / 2
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:18:01