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

如何实时更新C3.js散点图的图例与工具提示名称?解决resize复原问题

解决C3.js散点图图例与工具提示文本自定义及实时更新问题

我来帮你搞定这个问题——不用直接去改D3的DOM元素,用C3.js自带的API就能完美解决,还能避免调整尺寸后文本恢复初始状态的坑。

1. 初始化时直接自定义系列名称

C3提供了data.names配置项,在初始化图表的时候就能把原始的setosa、versicolor替换成你想要的name1、name2,这样图例和工具提示一开始就会显示正确的名称:

var chart = c3.generate({
  bindto: '#chart',
  data: {
    url: '你的数据URL',
    type: 'scatter',
    // 这里配置自定义名称
    names: {
      setosa: 'name1',
      versicolor: 'name2'
    }
  },
  // 其他轴标签、样式等配置...
});

2. 实时动态更新名称

如果之后需要动态修改这些名称,用C3的chart.data.names()方法就行,调用这个方法会自动触发图表重绘,图例、tooltip的文本都会同步更新,而且不管怎么调整图表尺寸,都不会恢复成原始文本(因为是修改C3内部的数据源配置,不是临时改DOM):

// 示例:动态更新名称
chart.data.names({
  setosa: '新的name1',
  versicolor: '新的name2'
});

为什么直接用D3改会失效?

你之前遇到的调整尺寸后文本复原的问题,是因为C3在图表重绘(比如窗口 resize、数据更新)时,会重新生成所有相关的DOM元素,之前用D3手动修改的文本会被覆盖掉。而通过C3的API修改,是直接修改了图表的数据源配置,重绘时会基于最新的配置渲染,自然不会出现复原问题。

完整示例代码

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.css">
</head>
<body>
  <div id="chart"></div>

  <script src="https://d3js.org/d3.v5.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.js"></script>
  <script>
    var chart = c3.generate({
      bindto: '#chart',
      data: {
        url: 'https://raw.githubusercontent.com/c3js/c3/master/data/c3_test.csv',
        type: 'scatter',
        names: {
          setosa: 'name1',
          versicolor: 'name2'
        }
      },
      axis: {
        x: {label: 'Sepal Length'},
        y: {label: 'Petal Length'}
      }
    });

    // 模拟3秒后动态更新名称
    setTimeout(() => {
      chart.data.names({
        setosa: 'Updated Name1',
        versicolor: 'Updated Name2'
      });
    }, 3000);
  </script>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:17:45