Jeu de données ECharts (dataset)

ECharts utilise dataset pour gérer les données.

Le composant dataset est utilisé pour une déclaration séparée des données, permettant de gérer les données indépendamment, de les réutiliser par plusieurs composants, et permettant un mappage données-visuel basé sur les données.

Voici l'exemple le plus simple de dataset :

Exemple

option = {
    legend: {},
    tooltip: {},
    dataset: {
        // Fournir une donnée.
        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]
        ]
    },
    // Déclarer un axe X, un axe de catégorie (category). Par défaut, l'axe de catégorie correspond à la première colonne du dataset.
    xAxis: {type: 'category'},
    // Déclarer un axe Y, un axe de valeurs.
    yAxis: {},
    // Déclarer plusieurs séries de barres. Par défaut, chaque série correspond automatiquement à chaque colonne du jeu de données.
    series: [
        {type: 'bar'},
        {type: 'bar'},
        {type: 'bar'}
    ]
}

Essayez-le vous-même »

Alternativement, le format courant de tableau d'objets peut également être utilisé :

Exemple

option = {
    legend: {},
    tooltip: {},
    dataset: {
        // L'ordre des noms de dimensions est spécifié ici, ce qui permet d'utiliser la mise en correspondance par défaut entre les dimensions et les axes.
        // Si aucune dimension n'est spécifiée, la mise en correspondance peut également être réalisée via series.encode spécifié, voir ci-après.
        dimensions: ['product', '2015', '2016', '2017'],
        source: [
            {product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7},
            {product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1},
            {product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5},
            {product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1}
        ]
    },
    xAxis: {type: 'category'},
    yAxis: {},
    series: [
        {type: 'bar'},
        {type: 'bar'},
        {type: 'bar'}
    ]
};

Essayez-le vous-même »

Mise en correspondance des données avec les graphiques

Nous pouvons mettre en correspondance les données avec des graphiques dans l'élément de configuration.

Nous pouvons utiliser l'attribut series.seriesLayoutBy pour configurer si le jeu de données associe les colonnes ou les lignes aux séries graphiques. Par défaut, il associe par colonnes.

Dans l'exemple suivant, nous utiliserons la propriété seriesLayoutBy pour configurer si les données sont affichées par colonnes ou par lignes.

Exemple

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: [
        // Ces séries seront dans le premier système de coordonnées cartésiennes, chaque série correspondant à une ligne du jeu de données.
        {type: 'bar', seriesLayoutBy: 'row'},
        {type: 'bar', seriesLayoutBy: 'row'},
        {type: 'bar', seriesLayoutBy: 'row'},
        // Ces séries seront dans le deuxième système de coordonnées cartésiennes, chaque série correspondant à une colonne du jeu de données.
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
    ]
}

Essayez-le vous-même »

Les données décrites par les graphiques courants se présentent principalement sous la forme d'une "table à deux dimensions". Nous pouvons utiliser la propriété series.encode pour mapper les données correspondantes sur les axes (tels que les axes X et Y) :

Exemple

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, 'Matcha Cacao'],
            [68.1, 79146, 'Thé'],
            [19.6, 91852, 'Jus d'orange'],
            [10.6, 101852, 'Jus de citron'],
            [32.7, 20112, 'Walnut Brownie']
        ]
    },
    grid: {containLabel: true},
    xAxis: {},
    yAxis: {type: 'category'},
    series: [
        {
            type: 'bar',
            encode: {
                // Associer la colonne "amount" à l'axe X.
                x: 'amount',
                // Associer la colonne "product" à l'axe Y.
                y: 'product'
            }
        }
    ]
};

Essayez-le vous-même »

La structure de base de la déclaration encode est la suivante : le côté gauche des deux-points est le nom spécifique du système de coordonnées, du label, etc., comme 'x', 'y', 'tooltip', etc., et le côté droit des deux-points est le nom de la dimension dans les données (format chaîne) ou l'indice de dimension (format numérique, en comptant à partir de 0). Une ou plusieurs dimensions peuvent être spécifiées (à l'aide d'un tableau). En général, il n'est pas nécessaire d'écrire toutes les informations ci-dessous ; écrivez-les selon vos besoins.

Les propriétés prises en charge par encode sont les suivantes :

// 在任何坐标系和系列中,都支持:
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
}

Plus d'exemples pour encode :

Exemple

$.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',
            Fonctionnalité: {
                dataZoom: {}
            }
        },
        grid: [
            {right: sizeValue, bottom: sizeValue},
            {left: sizeValue, bottom: sizeValue},
            {right: sizeValue, top: sizeValue},
            {left: sizeValue, top: sizeValue}
        ],
        xAxis: [
            {type: 'value', gridIndex: 0, name: 'Revenu', axisLabel: {rotate: 50, interval: 0}},
            {type: 'category', gridIndex: 1, name: 'Pays', boundaryGap: false, axisLabel: {rotate: 50, interval: 0}},
            {type: 'value', gridIndex: 2, name: 'Revenu', axisLabel: {rotate: 50, interval: 0}},
            {type: 'value', gridIndex: 3, name: 'Espérance de vie', axisLabel: {rotate: 50, interval: 0}}
        ],
        yAxis: [
            {type: 'value', gridIndex: 0, name: 'Espérance de vie'},
            {type: 'value', gridIndex: 1, name: 'Revenu'},
            {type: 'value', gridIndex: 2, name: 'Population'},
            {type: 'value', gridIndex: 3, name: 'Population'}
        ],
        dataset: {
            dimensions: [
                'Revenu',
                'Espérance de vie',
                'Population',
                'Pays',
                {name: 'Année', type: 'ordinal'}
            ],
            source: data
        },
        series: [
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 0,
                yAxisIndex: 0,
                encode: {
                    x: 'Revenu',
                    y: 'Espérance de vie',
                    tooltip: [0, 1, 2, 3, 4]
                }
            },
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 1,
                yAxisIndex: 1,
                encode: {
                    x: 'Pays',
                    y: 'Revenu',
                    tooltip: [0, 1, 2, 3, 4]
                }
            },
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 2,
                yAxisIndex: 2,
                encode: {
                    x: 'Revenu',
                    y: 'Population',
                    tooltip: [0, 1, 2, 3, 4]
                }
            },
            {
                type: 'scatter',
                symbolSize: symbolSize,
                xAxisIndex: 3,
                yAxisIndex: 3,
                encode: {
                    x: 'Espérance de vie',
                    y: 'Population',
                    tooltip: [0, 1, 2, 3, 4]
                }
            }
        ]
    };

    myChart.setOption(option);
});

Essayez-le vous-même »

Mappage des canaux visuels (couleur, taille, etc.)

Nous pouvons utiliser le composant visualMap pour mapper les canaux visuels.

Les éléments visuels peuvent être :

  • symbol : La forme graphique de l'élément graphique.
  • symbolSize : la taille de l'élément graphique.
  • color : la couleur de l'élément graphique.
  • colorAlpha : La transparence de la couleur de l'élément graphique.
  • opacity : La transparence de l'élément graphique et de ses accessoires (tels que les étiquettes de texte).
  • colorLightness : la luminosité de la couleur.
  • colorSaturation : la saturation de la couleur.
  • colorHue : la teinte de la couleur.

Plusieurs composants visualMap peuvent être définis, ce qui permet une mise en correspondance visuelle de plusieurs dimensions des données simultanément.

Exemple

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, 'Matcha Cacao'],
            [68.1, 79146, 'Thé'],
            [19.6, 91852, 'Jus d'orange'],
            [10.6, 101852, 'Jus de citron'],
            [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'],
        // Associer la colonne score à la couleur
        dimension: 0,
        inRange: {
            color: ['#D7DA8B', '#E15457']
        }
    },
    series: [
        {
            type: 'bar',
            encode: {
                // Associer la colonne "amount" à l'axe X.
                x: 'amount',
                // Associer la colonne "product" à l'axe Y
                y: 'product'
            }
        }
    ]
};

Essayez-le vous-même »

Liaison interactive

Dans l'exemple suivant, plusieurs graphiques partagent un même jeu de données, avec des interactions liées :

Exemple

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);

});

Essayez-le vous-même »
autres extensions