ECharts框架Sunburst拖拽功能實現方案詳解
unburst
要創(chuàng)建日出圖表,需要在系列配置項中聲明一系列類型“sunburst”,并在樹結構中聲明其數據:
var option = { series: { type: 'sunburst', data: [{ name: 'A', value: 10, children: [{ value: 3, name: 'Aa' }, { value: 5, name: 'Ab' }] }, { name: 'B', children: [{ name: 'Ba', value: 4 }, { name: 'Bb', value: 2 }] }, { name: 'C', value: 3 }] } };
它由多層環(huán)圖組成。在數據結構方面,內圈是外圈的父節(jié)點。因此,它不僅可以像餅圖一樣表示部分和整體的比例,還可以像矩形樹形圖一樣表示層次關系。
默認情況下,使用全局調色板指定最內層的顏色,其他層的顏色與其父元素相同。在日出圖表中,扇區(qū)塊的顏色可以通過以下三種方式設置: 串聯。data每個扇區(qū)塊的樣式在itemStyle中設置; 在系列中。levels設置itemStyle中每個層的樣式; 在系列中,整個日出圖表的樣式設置為itemStyle。 以上三者的優(yōu)先級從高到低,即系列。數據已配置itemStyle的扇區(qū)塊將覆蓋系列。級別ItemStyle和ItemStyle的系列設置。 接下來,我們將整體顏色設置為灰色“#aaa”,最里面的顏色設置為藍色“藍色”,Aa和B顏色設置為紅色“紅色”。`在這里插入代碼片
type: 'sunburst', data: [{ name: 'A', value: 10, children: [{ value: 3, name: 'Aa', itemStyle: { color: 'red' } }, { value: 5, name: 'Ab' }] }, { name: 'B', children: [{ name: 'Ba', value: 4 }, { name: 'Bb', value: 2 }], itemStyle: { color: 'red' } }, { name: 'C', value: 3 }], itemStyle: { color: '#aaa' },
日出圖是一個層次結構。為了便于配置相同的圖層樣式,我們提供了級別配置項。它是一個數組,其中項0表示向下鉆取數據后返回到上層的圖形,每個后續(xù)項表示從圓心到外層的級別。 例如,如果我們沒有數據鉆取功能,并且希望將最里面的扇區(qū)塊的顏色設置為紅色,將文本設置為藍色,我們可以如下設置。 當鼠標移動到扇區(qū)塊時,日出圖表支持突出顯示相關數據塊。可以設置highlightPolicy,包括以下突出顯示方法: “descendant”(默認):突出顯示鼠標移動的扇區(qū)塊及其后代元素; “祖先”:突出顯示鼠標所在的扇區(qū)塊及其祖先元素; “self”:僅突出顯示鼠標所在的扇區(qū)塊; “無”:其他元素不會被淡化。 上面提到的“高亮顯示”將使用鼠標所在扇區(qū)塊的強調樣式;對于其他相關的扇區(qū)塊,將使用高光樣式。通過這種方式,可以很容易地實現突出顯示相關數據的需要。
具體而言,對于配置項:
itemStyle: { color: 'yellow', borderWidth: 2, emphasis: { color: 'red' }, highlight: { color: 'orange' }, downplay: { color: '#ccc' } }
拖拽
convertToPixel API用于將數據轉換為像素坐標,從而可以獲得每個點的位置,并繪制這些點。myChart。在語句convertToPixel('grid',dataItem)中,第一個參數'grid'表示dataItem在網格組件(即直角坐標系)中轉換。所謂的“像素坐標”是指以容器的dom元素的左上角為零點的基于像素的坐標系中的坐標。 注意,這應該在第一個setOption之后完成,也就是說,只有在網格初始化convertToPixel('grid',dataItem)之后才能調用myChart 使用此代碼,可以拖動多個點。接下來,為每個點添加拖動響應事件:
myChart.setOption({ graphic: echarts.util.map(data, function (dataItem, dataIndex) { return { // 'circle' 表示這個 graphic element 的類型是圓點。 type: 'circle', shape: { // 圓點的半徑。 r: symbolSize / 2 }, position: myChart.convertToPixel('grid', dataItem), // 這個屬性讓圓點不可見(但是不影響他響應鼠標事件)。 invisible: true, // 這個屬性讓圓點可以被拖拽。 draggable: true, // 把 z 值設得比較大,表示這個圓點在最上方,能覆蓋住已有的折線圖的圓點。 z: 100, ondrag: echarts.util.curry(onPointDragging, dataIndex) }; }) });
聲明一個 graphic component,里面有若干個 type 為 'circle' 的 graphic elements。 這里使用了 echarts.util.map 這個幫助方法,其行為和 Array.prototype.map 一樣,但是兼容 es5 以下的環(huán)境。 用 map 方法遍歷 data 的每項,為每項生成一個圓點。 用 transform 的方式對圓點進行定位。position: [x, y] 表示將圓點平移到 [x, y] 位置。 這里使用了 convertToPixel 這個 API 來得到每個圓點的位置。 此圓點的拖拽的響應事件,在拖拽過程中會不斷被觸發(fā)。下面介紹詳情。 這里使用了 echarts.util.curry 這個幫助方法,意思是生成一個與 onPointDragging 功能一樣的新的函數,只不過第一個參數永遠為此時傳入的 dataIndex 的值。
myChart.setOption({ ..., tooltip: { // 表示不使用默認的『顯示』『隱藏』觸發(fā)規(guī)則。 triggerOn: 'none', formatter: function (params) { return 'X: ' + params.data[0].toFixed(2) + '<br>Y: ' + params.data[1].toFixed(2); } } });
此時,完成了拖動的基本功能。但是,如果要在拖動過程中進一步實時查看拖動點的數據值更改,可以使用工具提示組件實時顯示該值。然而,Tooltip有其默認的“顯示”和“隱藏”觸發(fā)規(guī)則,這在我們的拖放場景中不適用。因此,我們還需要手動自定義工具提示的“顯示”和“隱藏”行為。
myChart.setOption({ graphic: echarts.util.map(data, function (item, dataIndex) { return { type: 'circle', ..., onmousemove: echarts.util.curry(showTooltip, dataIndex), onmouseout: echarts.util.curry(hideTooltip, dataIndex), }; }) }); function showTooltip(dataIndex) { myChart.dispatchAction({ type: 'showTip', seriesIndex: 0, dataIndex: dataIndex }); } function hideTooltip(dataIndex) { myChart.dispatchAction({ type: 'hideTip' }); }
在 mouseover 的時候顯示,在 mouseout 的時候隱藏。 此時,完成了拖動的基本功能。但是,如果要在拖動過程中進一步實時查看拖動點的數據值更改,可以使用工具提示組件實時顯示該值。然而,Tooltip有其默認的“顯示”和“隱藏”觸發(fā)規(guī)則,這在我們的拖放場景中不適用。因此,我們還需要手動自定義工具提示的“顯示”和“隱藏”行為。
以上就是ECharts框架Sunburst拖拽功能實現方案詳解的詳細內容,更多關于ECharts Sunburst拖拽的資料請關注腳本之家其它相關文章!
相關文章
實現基于飛書webhook監(jiān)聽github代碼提交
這篇文章主要為大家介紹了實現基于飛書webhook監(jiān)聽github代碼提交示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01微信小程序 ES6Promise.all批量上傳文件實現代碼
這篇文章主要介紹了微信小程序 ES6Promise.all批量上傳文件實現代碼的相關資料,需要的朋友可以參考下2017-04-04網站申請不到支付寶接口、微信接口,免接口收款實現方式幾種解決辦法
這篇文章主要介紹了網站申請不到支付寶接口、微信接口,免接口收款實現方式幾種解決辦法的相關資料,需要的朋友可以參考下2016-12-12