先看一下效果圖:
image.png
實現(xiàn)思路:
除了本來要繪制的餅圖以外,再繪制兩個透明的餅圖(一個用來將標志線與餅圖分隔開估灿,另一個展示小圓點)
function setOption(chart, chartData) {
let pieSeries = {
type: 'pie',
minAngle: 18,
center: ['50%', '46%'],
data: [
{name: '類型一', value: 210},
{name: '類型二', value: 22},
{name: '類型三', value: 10},
{name: '類型四', value: 20},
{name: '類型五', value: 30},
{name: '類型六', value: 30},
{name: '類型七', value: 22210}
]
};
const option = {
backgroundColor: "#fff",
color: ["#3C90F7", "#39DADD", "#35D065", "#F4CD49", "#F5913D", "#7B4BD9", "#E9431F"],
legend: {
icon: 'circle',
itemWidth: 8,
itemHeight: 8,
bottom: 0,
itemGap: 20,
padding: [ 10, 18 ],
data: legendData
},
series: [{
// 透明餅圖(只展示小圓點)崇呵,用作標志線的起點
...pieSeries,
radius: ['0%', '50%'],
labelLine: { length: 0, length2: 0 },
itemStyle: { opacity: 0 },
label: {
normal: {
show: true,
formatter: '{b|}',
rich: {
b: {
height: 4,
width: 4,
lineHeight: 0,
marginBottom: 10,
padding: [1, -5],
borderRadius: 5,
backgroundColor: 'auto', // 圓點顏色和餅圖塊狀顏色一致
}
}
}
}
}, {
// 透明餅圖(只展示標志線),用來將標志線和餅圖分離開
...pieSeries,
radius: ['30%', '50%'],
labelLine: { length2: 600 },
itemStyle: { opacity:0 },
label: {
alignTo: 'edge',
margin: 0,
formatter: '{value|{c}}{abg|}\n{hr|}\n{name|馅袁(eo4xlb9%)}',
rich: {
value: {
color: '#000',
lineHeight: 18,
fontSize: 12
},
hr: { height: 0 },
name: {
fontSize: 12,
lineHeight: 18,
color: '#696969'
}
},
distanceToLabelLine: 0
}
}, {
// 環(huán)形餅圖(不展示標志線)
...pieSeries,
radius: ['30%', '44%'],
label: {
show: false
},
}]
};
chart.setOption(option);
}
不足:
1域慷、上面這種方法基本上可以實現(xiàn),但是小圓點的位置有一丟丟的歪汗销,如若各位老兄有更好的方案犹褒,歡迎指正。
2弛针、必須需設置 minAngle , 否則當扇形區(qū)域角度很小的時候叠骑,文案會各種堆疊。削茁。宙枷。。
其他數(shù)據(jù)可視化工具推薦:
如果項目沒有要求必須用Echarts茧跋,則可以嘗試一下AntV-F2慰丛,該工具可以完美的實現(xiàn)上圖所示的效果(官方文檔地址:https://f2.antv.vision/zh/examples/pie/basic#pie-with-label),但是目前微信小程序上的PieLabel插件的引用還存在一些問題瘾杭,如有大佬解決了這個問題(除了修改構建后的包之外)希望也能聯(lián)系我诅病,在此先行謝過~