天天看點

ECharts 旭日圖

旭日圖(Sunburst)由多層的環形圖組成,在資料結構上,内圈是外圈的父節點。是以,它既能像餅圖一樣表現局部和整體的占比,又能像矩形樹圖一樣表現層級關系。

ECharts 建立旭日圖很簡單,隻需要在 series 配置項中聲明類型為 sunburst 即可,data 資料結構以樹形結構聲明,看下一個簡單的執行個體:

var option = {

    series: {

        type: 'sunburst',

        data: [{

            name: 'A',

            value: 10,

            children: [{

                value: 3,

                name: 'Aa'

            }, {

                value: 5,

                name: 'Ab'

            }]

        }, {

            name: 'B',

                name: 'Ba',

                value: 4

                name: 'Bb',

                value: 2

            name: 'C',

            value: 3

        }]

    }

};

預設情況下會使用全局調色盤 color 配置設定最内層的顔色,其餘層則與其父元素同色。

在旭日圖中,扇形塊的顔色有以下三種設定方式:

在 series.data.itemStyle 中設定每個扇形塊的樣式。

在 series.levels.itemStyle 中設定每一層的樣式。

在 series.itemStyle 中設定整個旭日圖的樣式。

上述三者的優先級是從高到低的,也就是說,配置了 series.data.itemStyle 的扇形塊将會覆寫 series.levels.itemStyle 和 series.itemStyle 的設定。

下面,我們将整體的顔色設為灰色 #aaa,将最内層的顔色設為藍色 blue,将 Aa、B 這兩塊設為紅色 red。

                name: 'Aa',

                itemStyle: {

                    color: 'red'

                }

            }],

            itemStyle: {

                color: 'red'

            }

        }],

        itemStyle: {

            color: '#aaa'

        },

        levels: [{

            // 留給資料下鑽的節點屬性

                color: 'blue'

按層配置樣式是一個很常用的功能,能夠很大程度上提高配置的效率。

旭日圖預設支援資料下鑽,也就是說,當點選了扇形塊之後,将以該扇形塊的資料作為根節點,進一步顯示該資料的細節。

在資料下鑽後,圖形的中間會出現一個用于傳回上一層的圖形,該圖形的樣式可以通過 levels[0] 配置。

var data = [{

    name: 'Grandpa',

    children: [{

        name: 'Uncle Leo',

        value: 15,

        children: [{

            name: 'Cousin Jack',

            value: 2

            name: 'Cousin Mary',

            value: 5,

                name: 'Jackson',

            name: 'Cousin Ben',

            value: 4

    }, {

        name: 'Father',

        value: 10,

            name: 'Me',

            value: 5

            name: 'Brother Peter',

            value: 1

    }]

}, {

    name: 'Nancy',

        name: 'Uncle Nike',

            name: 'Cousin Betty',

            name: 'Cousin Jenny',

}];

option = {

        // highlightPolicy: 'ancestor',

        data: data,

        radius: [0, '90%'],

        label: {

            rotate: 'radial'

        }

如果不需要資料下鑽功能,可以通過将 nodeClick 設定為 false 來關閉,也可以設為 'link',并将 data.link 設為點選扇形塊對應打開的連結。

旭日圖支援滑鼠移動到某扇形塊時,高亮相關資料塊的操作,可以通過設定 highlightPolicy,包括以下幾種高亮方式:

'descendant'(預設值):高亮滑鼠移動所在扇形塊與其後代元素;

'ancestor':高亮滑鼠所在扇形塊與其祖先元素;

'self':僅高亮滑鼠所在扇形塊;

'none':不會淡化(downplay)其他元素。

上面提到的"高亮",對于滑鼠所在的扇形塊,會使用 emphasis 樣式;對于其他相關扇形塊,則會使用 highlight 樣式。通過這種方式,可以很友善地實作突出顯示相關資料的需求。

具體來說,對于配置項:

highlightPolicy 為 'descendant':

    silent: true,

        radius: ['15%', '95%'],

        center: ['50%', '60%'],

        sort: null,

        highlightPolicy: 'descendant',

                name: 'target',

                value: 4,

                children: [{

                    value: 2,

                    children: [{

                        value: 1

                    }]

                }, {

                    value: 1

                    value: 0.5

                }]

            value: 4,

                    value: 2

            normal: {

                rotate: 'none',

                color: '#fff'

        levels: [],

            color: 'yellow',

            borderWidth: 2

        emphasis: {

        highlight: {

                color: 'orange'

        downplay: {

                color: '#ccc'

setTimeout(function () {

    myChart.dispatchAction({

        type: 'sunburstHighlight',

        targetNodeId: 'target'

    });

});

highlightPolicy 為 'ancestor' :

        highlightPolicy: 'ancestor',

                        name: 'target',

旭日圖 1

旭日圖 2

更多旭日圖配置參考:https://www.echartsjs.com/zh/option.html#series-sunburst