Funnel漏斗图的各个阶段宽度比例不按预期显示怎么办?

a'ゞ素平 阅读 18

我在用ECharts做漏斗图的时候,发现各个阶段的宽度比例完全不对。按照文档设置了width: '40%',但每个阶段的宽度看起来完全随机,比如第一阶段是最大宽度,第二阶段反而比第四阶段还窄。

我尝试过调整数据顺序和数值比例,但没用。这是我的配置代码:


option = {
  series: [{
    type: 'funnel',
    data: [
      {value: 150, name: '阶段1'},
      {value: 120, name: '阶段2'},
      {value: 90, name: '阶段3'},
      {value: 60, name: '阶段4'}
    ],
    sort: 'ascending',
    width: '40%',
    label: {
      show: true
    }
  }]
};

数据明明是递减的,但图表显示阶段2(120)反而比阶段3(90)宽很多。有没有可能跟sort参数或比例计算方式有关?应该怎么调整才能让宽度严格按数值比例显示?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
 ___兴娜
这个问题其实是对 ECharts 漏斗图 width 配置项的误解导致的。width: '40%' 这个参数只是控制整个漏斗图最大阶段的宽度,并不会直接影响各个阶段之间的比例关系。

漏斗图每个阶段的宽度是根据 value 值与最大值的比例来计算的,而不是你设置的 width。虽然你数据中 value 是递减的,但你设置了 sort: 'ascending',这会让漏斗图底部最窄,顶部最宽,也就是说阶段1(150)是最大的阶段,所以它会被当作 100% 宽度基准。

如果你希望阶段宽度严格按照 value 比例显示,且不受到 sort 排序的影响,可以尝试下面的做法:

option = {
series: [{
type: 'funnel',
data: [
{value: 150, name: '阶段1'},
{value: 120, name: '阶段2'},
{value: 90, name: '阶段3'},
{value: 60, name: '阶段4'}
],
sort: 'descending', // 改为降序排列,确保最大值在最上面
width: '40%',
label: {
show: true
}
}]
};

如果你还是发现宽度比例不对,可以尝试不设置 width,让 ECharts 自动计算一个合理的最大宽度。宽度比例计算的问题就交给 ECharts 内部处理。

如果想手动控制最大宽度,又想保持比例准确,width 可以设为像素值,比如 width: 200,这样各阶段宽度按 value 比例缩放就不会出现比例错乱的问题。
点赞 4
2026-02-06 23:10