ECharts Dataset (dataset)

ECharts использует dataset для управления данными.

Компонент dataset используется для раздельного объявления данных, позволяя управлять данными независимо, повторно использовать их несколькими компонентами и обеспечивая сопоставление данных с визуальными элементами на основе данных.

Ниже приведён простейший пример dataset:

Пример

option = {
    legend: {},
    tooltip: {},
    dataset: {
        // Предоставьте фрагмент данных.
        source: [
            ['product', '2015', '2016', '2017'],
            ['Matcha Latte', 43.3, 85.8, 93.7],
            ['Milk Tea', 83.1, 73.4, 55.1],
            ['Cheese Cocoa', 86.4, 65.2, 82.5],
            ['Walnut Brownie', 72.4, 53.9, 39.1]
        ]
    },
    // Объявите ось X, категориальную ось (category). По умолчанию категориальная ось соответствует первому столбцу dataset.
    xAxis: {type: 'category'},
    // Объявить ось Y, ось значений.
    yAxis: {},
    // Объявить несколько серий столбцов. По умолчанию каждая серия автоматически соответствует каждому столбцу набора данных.
    series: [
        {type: 'bar'},
        {type: 'bar'},
        {type: 'bar'}
    ]
}

Попробуйте сами »

Кроме того, также можно использовать обычный формат массива объектов:

Пример

option = {
    legend: {},
    tooltip: {},
    dataset: {
        // Здесь задаётся порядок имён измерений, что позволяет использовать сопоставление измерений с осями по умолчанию.
        // если dimensions не указаны, сопоставление также можно выполнить через указание series.encode, см. далее.
        dimensions: ['product', '2015', '2016', '2017'],
        source: [
            {product: 'Матча латте', '2015': 43.3, '2016': 85.8, '2017': 93.7},
            {product: 'Чай с молоком', '2015': 83.1, '2016': 73.4, '2017': 55.1},
            {product: 'Какао с сыром', '2015': 86.4, '2016': 65.2, '2017': 82.5},
            {product: 'Брауни с грецким орехом', '2015': 72.4, '2016': 53.9, '2017': 39.1}
        ]
    },
    xAxis: {type: 'category'},
    yAxis: {},
    series: [
        {type: 'bar'},
        {type: 'bar'},
        {type: 'bar'}
    ]
};

Попробуйте сами »

Сопоставление данных с графикой

Мы можем сопоставлять данные с графикой в элементе конфигурации.

С помощью атрибута series.seriesLayoutBy можно настроить, сопоставляет ли dataset столбцы или строки с графическими сериями. По умолчанию сопоставление выполняется по столбцам.

В следующем примере мы будем использовать свойство seriesLayoutBy, чтобы настроить, отображаются ли данные по столбцам или по строкам.

Пример

option = {
    legend: {},
    tooltip: {},
    dataset: {
        source: [
            ['product', '2012', '2013', '2014', '2015'],
            ['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
            ['Milk Tea', 86.5, 92.1, 85.7, 83.1],
            ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]
        ]
    },
    xAxis: [
        {type: 'category', gridIndex: 0},
        {type: 'category', gridIndex: 1}
    ],
    yAxis: [
        {gridIndex: 0},
        {gridIndex: 1}
    ],
    grid: [
        {bottom: '55%'},
        {top: '55%'}
    ],
    series: [
        // Эти серии будут в первой декартовой системе координат, причём каждая серия соответствует строке в dataset.
        {type: 'bar', seriesLayoutBy: 'row'},
        {type: 'bar', seriesLayoutBy: 'row'},
        {type: 'bar', seriesLayoutBy: 'row'},
        // Эти серии будут во второй декартовой системе координат, причём каждая серия соответствует столбцу в dataset.
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
    ]
}

Попробуйте сами »

Данные, описываемые обычными диаграммами, чаще всего имеют структуру «двумерной таблицы». Мы можем использовать свойство series.encode, чтобы сопоставить соответствующие данные с осями (такими как оси X и Y):

Пример

var option = {
    dataset: {
        source: [
            ['score', 'amount', 'product'],
            [89.3, 58212, 'Matcha Latte'],
            [57.1, 78254, 'Milk Tea'],
            [74.4, 41032, 'Cheese Cocoa'],
            [50.1, 12755, 'Cheese Brownie'],
            [89.7, 20145, 'Матча Какао'],
            [68.1, 79146, 'Чай'],
            [19.6, 91852, 'Апельсиновый сок'],
            [10.6, 101852, 'Лимонный сок'],
            [32.7, 20112, 'Walnut Brownie']
        ]
    },
    grid: {containLabel: true},
    xAxis: {},
    yAxis: {type: 'category'},
    series: [
        {
            type: 'bar',
            encode: {
                // Сопоставить столбец "amount" с осью X.
                x: 'amount',
                // Сопоставить столбец "product" с осью Y.
                y: 'product'
            }
        }
    ]
};

Попробуйте сами »

Базовая структура объявления encode выглядит следующим образом: слева от двоеточия указывается конкретное имя системы координат, метки и т. п., например 'x', 'y', 'tooltip' и т. д., а справа от двоеточия — имя измерения в данных (в строковом формате) или индекс измерения (в числовом формате, отсчёт с 0). Можно указать одно или несколько измерений (с помощью массива). В целом не всю приведённую ниже информацию нужно записывать; записывайте её по мере необходимости.

Ниже перечислены свойства, поддерживаемые encode:

// 在任何坐标系和系列中,都支持:
encode: {
    // 使用 “名为 product 的维度” 和 “名为 score 的维度” 的值在 tooltip 中显示
    tooltip: ['product', 'score']
    // 使用 “维度 1” 和 “维度 3” 的维度名连起来作为系列名。(有时候名字比较长,这可以避免在 series.name 重复输入这些名字)
    seriesName: [1, 3],
    // 表示使用 “维度2” 中的值作为 id。这在使用 setOption 动态更新数据时有用处,可以使新老数据用 id 对应起来,从而能够产生合适的数据更新动画。
    itemId: 2,
    // 指定数据项的名称使用 “维度3” 在饼图等图表中有用,可以使这个名字显示在图例(legend)中。
    itemName: 3
}

// 直角坐标系(grid/cartesian)特有的属性:
encode: {
    // 把 “维度1”、“维度5”、“名为 score 的维度” 映射到 X 轴:
    x: [1, 5, 'score'],
    // 把“维度0”映射到 Y 轴。
    y: 0
}

// 单轴(singleAxis)特有的属性:
encode: {
    single: 3
}

// 极坐标系(polar)特有的属性:
encode: {
    radius: 3,
    angle: 2
}

// 地理坐标系(geo)特有的属性:
encode: {
    lng: 3,
    lat: 2
}

// 对于一些没有坐标系的图表,例如饼图、漏斗图等,可以是:
encode: {
    value: 3
}

Дополнительные примеры encode:

Пример

$.get('https://www.example.com/static/js/life-expectancy-table.json', function (data) {
    var sizeValue = '57%';
    var symbolSize = 2.5;
    option = {
        legend: {},
        tooltip: {},
        toolbox: {
            left: 'center',
            особенность: {
                dataZoom: {}
            }
        },
        grid: [
            {right: sizeValue, bottom: sizeValue},
            {left: sizeValue, bottom: sizeValue},
            {right: sizeValue, top: sizeValue},
            {left: sizeValue, top: sizeValue}
        ],
        xAxis: [
            {type: 'value', gridIndex: 0, name: 'Доход', axisLabel: {rotate: 50, interval: 0}},
            {type: 'category', gridIndex: 1, name: 'Страна', boundaryGap: false, axisLabel: {rotate: 50, interval: 0}},
            {type: 'value', gridIndex: 2, name: 'Доход', axisLabel: {rotate: 50, interval: 0}},
            {type: 'value', gridIndex: 3, name: 'Ожидаемая продолжительность жизни', axisLabel: {rotate: 50, interval: 0}}
        ],
        yAxis: [
            {type: 'value', gridIndex: 0, name: 'Ожидаемая продолжительность жизни'},
            {type: 'value', gridIndex: 1, name: 'Доход'},
            {type: 'value', gridIndex: 2, name: 'Population'},
            {type: 'value', gridIndex: 3, name: 'Population'}
        ],
        dataset: {
            dimensions: [
                'Доход',
                'Ожидаемая продолжительность жизни',
                'Population',
                'Страна',
                {name: 'Год', type: 'ordinal'}
            ],
            source: data
        },
        series: [
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 0,
                yAxisIndex: 0,
                encode: {
                    x: 'Доход',
                    y: 'Ожидаемая продолжительность жизни',
                    tooltip: [0, 1, 2, 3, 4]
                }
            },
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 1,
                yAxisIndex: 1,
                encode: {
                    x: 'Страна',
                    y: 'Доход',
                    tooltip: [0, 1, 2, 3, 4]
                }
            },
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 2,
                yAxisIndex: 2,
                encode: {
                    x: 'Доход',
                    y: 'Population',
                    tooltip: [0, 1, 2, 3, 4]
                }
            },
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 3,
                yAxisIndex: 3,
                encode: {
                    x: 'Ожидаемая продолжительность жизни',
                    y: 'Population',
                    tooltip: [0, 1, 2, 3, 4]
                }
            }
        ]
    };

    myChart.setOption(option);
});

Попробуйте сами »

Сопоставление визуальных каналов (цвет, размер и т. д.)

Мы можем использовать компонент visualMap для сопоставления визуальных каналов.

Визуальные элементы могут быть:

  • symbol: графическая форма графического элемента.
  • symbolSize: размер графического элемента.
  • color: цвет графического элемента.
  • colorAlpha: прозрачность цвета графического элемента.
  • opacity: прозрачность графического элемента и его дополнительных элементов (например, текстовых меток).
  • colorLightness: светлота цвета.
  • colorSaturation: насыщенность цвета.
  • colorHue: оттенок цвета.

Можно определить несколько компонентов visualMap, что позволяет одновременно визуально сопоставлять несколько измерений в данных.

Пример

var option = {
    dataset: {
        source: [
            ['score', 'amount', 'product'],
            [89.3, 58212, 'Matcha Latte'],
            [57.1, 78254, 'Milk Tea'],
            [74.4, 41032, 'Cheese Cocoa'],
            [50.1, 12755, 'Cheese Brownie'],
            [89.7, 20145, 'Матча Какао'],
            [68.1, 79146, 'Чай'],
            [19.6, 91852, 'Апельсиновый сок'],
            [10.6, 101852, 'Лимонный сок'],
            [32.7, 20112, 'Walnut Brownie']
        ]
    },
    grid: {containLabel: true},
    xAxis: {name: 'amount'},
    yAxis: {type: 'category'},
    visualMap: {
        orient: 'horizontal',
        left: 'center',
        min: 10,
        max: 100,
        text: ['High Score', 'Low Score'],
        // Сопоставить столбец score с цветом
        dimension: 0,
        inRange: {
            color: ['#D7DA8B', '#E15457']
        }
    },
    series: [
        {
            type: 'bar',
            encode: {
                // Сопоставить столбец "amount" с осью X.
                x: 'amount',
                // Сопоставить столбец "product" с осью Y
                y: 'product'
            }
        }
    ]
};

Попробуйте сами »

Интерактивная связь

В следующем примере несколько диаграмм совместно используют один набор данных со связанными взаимодействиями:

Пример

setTimeout(function () {

    option = {
        legend: {},
        tooltip: {
            trigger: 'axis',
            showContent: false
        },
        dataset: {
            source: [
                ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
                ['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
                ['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
                ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
                ['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
            ]
        },
        xAxis: {type: 'category'},
        yAxis: {gridIndex: 0},
        grid: {top: '55%'},
        series: [
            {type: 'line', smooth: true, seriesLayoutBy: 'row'},
            {type: 'line', smooth: true, seriesLayoutBy: 'row'},
            {type: 'line', smooth: true, seriesLayoutBy: 'row'},
            {type: 'line', smooth: true, seriesLayoutBy: 'row'},
            {
                type: 'pie',
                id: 'pie',
                radius: '30%',
                center: ['50%', '25%'],
                label: {
                    formatter: '{b}: {@2012} ({d}%)'
                },
                encode: {
                    itemName: 'product',
                    value: '2012',
                    tooltip: '2012'
                }
            }
        ]
    };

    myChart.on('updateAxisPointer', function (event) {
        var xAxisInfo = event.axesInfo[0];
        if (xAxisInfo) {
            var dimension = xAxisInfo.value + 1;
            myChart.setOption({
                series: {
                    id: 'pie',
                    label: {
                        formatter: '{b}: {@[' + dimension + ']} ({d}%)'
                    },
                    encode: {
                        value: dimension,
                        tooltip: dimension
                    }
                }
            });
        }
    });

    myChart.setOption(option);

});

Попробуйте сами »
Другие расширения