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

ECharts关联图表saveAsImage仅下载单张图表的实现方法

解决ECharts分组后saveAsImage同时下载多张图表的问题

问题场景

将两个ECharts图表通过group关联后,点击任意一个图表的saveAsImage按钮会同时下载两张图表,希望保留分组的联动效果(如图例同步选择、数据缩放同步)的同时,恢复为仅下载当前点击的单张图表。

原代码示例:

const chart1 = echarts.init(document.getElementById('chart1'));
const option1 = {
  title: {
    text: 'Chart 1',
    left: 'center',
  },
  grid: {
    show: true,
    top: 30,
    backgroundColor: '#F5F5F5',
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['Grapes', 'Bananas', 'Apples'],
    bottom: 0,
  },
  xAxis: {
    data: ['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00']
  },
  yAxis: {},
  series: [
    {
      name: 'Apples',
      type: 'line',
      data: [10, 35, 20, 13, 12, 18, 41]
    },
    {
      name: 'Bananas',
      type: 'line',
      data: [20, 11, 10, 9, 8, 8, 1]
    }
  ],
  toolbox: {
    feature: {
      saveAsImage: {}
    }
  }
};

const chart2 = echarts.init(document.getElementById('chart2'));
const option2 = {
  title: {
    text: 'Chart 2',
    left: 'center',
  },
  grid: {
    show: true,
    top: 30,
    backgroundColor: '#F5F5F5',
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['Grapes', 'Bananas', 'Apples'],
    bottom: 0,
  },
  xAxis: {
    data: ['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00']
  },
  yAxis: [{}],
  series: [
    {
      name: 'Apples',
      type: 'line',
      data: [25, 5, 17, 11, 33, 32, 2]
    },
    {
      name: 'Bananas',
      type: 'line',
      data: [1, 3, 2, 6, 7, 8, 11]
    }
  ],
  dataZoom: [],
  toolbox: {
    feature: {
      saveAsImage: {}
    }
  }
};

chart1.setOption(option1);
chart2.setOption(option2);
chart1.group = 'group1';
chart2.group = 'group1';
echarts.connect('group1');

解决方案

方法1:指定分组同步的事件类型(推荐)

ECharts的echarts.connect方法支持第二个参数,可指定需要同步的事件类型,默认会同步所有事件(包括saveAsImage的触发)。我们只需保留需要联动的事件,排除saveAsImage相关逻辑即可:

修改最后一行的echarts.connect调用:

// 仅同步图例选择、数据缩放等需要联动的事件,不包含saveAsImage
echarts.connect('group1', {
  link: [
    'legendselectchanged',
    'legendselected',
    'legendunselected',
    'datazoom',
    'datarangeselected',
    'timelinechanged',
    'timelineplaychanged'
  ]
});

配置后,分组图表依然会同步图例选择、数据缩放等操作,但点击saveAsImage时只会下载当前点击的单张图表。

方法2:自定义saveAsImage的点击事件

如果需要更灵活的控制(比如定制下载文件名、图片清晰度),可以给每个图表的saveAsImage配置自定义点击回调,直接调用当前图表的getDataURL生成图片并下载,绕过分组同步逻辑:

修改两个图表option中的toolbox.feature.saveAsImage配置(以chart1为例,chart2做相同修改):

toolbox: {
  feature: {
    saveAsImage: {
      onclick: function() {
        // 获取当前触发点击的图表实例
        const currentChart = this.chart;
        // 生成当前图表的图片链接,可自定义像素比、背景色
        const imgUrl = currentChart.getDataURL({
          pixelRatio: 2,
          backgroundColor: '#ffffff'
        });
        // 创建a标签触发下载
        const downloadLink = document.createElement('a');
        downloadLink.href = imgUrl;
        downloadLink.download = `${currentChart.getOption().title.text}.png`;
        downloadLink.click();
      }
    }
  }
}

这种方式完全自定义了保存图片的行为,不受分组同步的影响,适合有个性化需求的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:14:53