ECharts 数据集(dataset)

ECharts 数据集(dataset)详解

ECharts 从 4.0 开始引入 dataset 组件,用于统一管理数据源,实现数据与图表配置分离。这极大提升了代码可维护性,尤其适合:

  • 多系列图表共享同一数据源
  • 动态切换数据源
  • 数据转换(transform,如聚合、过滤)
  • 与现代框架(如 Vue/React)结合使用

1. 基本使用:分离数据与系列

传统方式数据写在 series.data 中,dataset 方式将数据集中到 dataset.source。

示例:折线图使用 dataset

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>ECharts dataset 示例</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body>
    <div id="main" style="width: 800px; height: 600px;"></div>
    <script>
        const myChart = echarts.init(document.getElementById('main'));
        const option = {
            title: { text: '使用 dataset 的多系列折线图' },
            tooltip: { trigger: 'axis' },
            legend: { data: ['邮件营销', '联盟广告', '视频广告'] },
            dataset: {
                source: [
                    ['产品', '邮件营销', '联盟广告', '视频广告'],
                    ['衬衫', 120, 80, 150],
                    ['毛衣', 90, 100, 120],
                    ['裤子', 150, 60, 180],
                    ['鞋子', 80, 120, 90]
                ]
            },
            xAxis: { type: 'category' },
            yAxis: { type: 'value' },
            series: [
                { type: 'line', encode: { x: '产品', y: '邮件营销' } },
                { type: 'line', encode: { x: '产品', y: '联盟广告' } },
                { type: 'line', encode: { x: '产品', y: '视频广告' } }
            ]
        };
        myChart.setOption(option);
    </script>
</body>
</html>

关键点

  • source 支持二维数组(第一行可作为 dimensions 表头)或对象数组。
  • series.encode 指定维度映射(x/y/value 等),避免硬编码索引。

2. 多 dataset 与 sourceIndex

可以定义多个 dataset,series 通过 datasetIndexsourceIndex 指定数据源。

dataset: [
    { source: [...] },  // index 0
    { source: [...] }   // index 1
],
series: [{ datasetIndex: 1, ... }]

3. 数据转换(transform)——强大功能

ECharts 5+ 支持内置 transform,如 filter、aggregate、sort 等。

示例:聚合统计

dataset: [
    {
        source: [ /* 原始数据 */ ]
    },
    {
        id: 'aggregated',
        fromDatasetId: 'raw',
        transform: {
            type: 'aggregate',
            config: {
                groupBy: 'category',
                fields: [{ field: 'value', method: 'sum', as: 'total' }]
            }
        }
    }
],
series: [{ datasetId: 'aggregated', ... }]

4. 异步加载与 dataset

结合异步数据非常方便:

fetch('/data.json')
    .then(res => res.json())
    .then(data => {
        myChart.setOption({
            dataset: { source: data }
        });
    });

优势总结

  • 解耦:数据变更只需更新 dataset,系列配置不变。
  • 复用:多个图表共享同一 dataset。
  • 灵活:支持 dimensions 命名、encode 映射、transform 管道。
  • 性能:大数据时更高效(ECharts 内部优化)。

官方文档(强烈推荐):

  • dataset 手册:https://echarts.apache.org/handbook/zh/concepts/dataset/
  • 示例:https://echarts.apache.org/examples/zh/#chart-type-line (搜索 dataset)

如果你需要对象数组格式、transform 具体示例,或在 Vue/React 中的使用方式,告诉我,我可以给出完整代码!

文章已创建 3420

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部