Echarts版本:2.2.7
具體思路,通過對餅狀圖對象注冊ecConfig.EVENT.PIE_SELECTED事件,對餅狀圖點擊的塊進行判斷,根據需求改變series中的對象以及對象中的數據,從而進行改變餅狀圖的層的展示,如下圖所示(數據來自官方網站),點擊同心圓最里層的不同部分會顯示不同的數據

代碼如下:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
#platoBox {
width: 600px;
height: 600px;
}
</style>
<script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
<script type="text/javascript">
window.onload = function() {
// 路徑配置
require.config({
paths: {
echarts: 'http://echarts.baidu.com/build/dist'
}
});
require([
'echarts',
'echarts/chart/pie'
], function(ec) {
var dom = document.getElementById("platoBox");
var myChart = ec.init(dom);
option = {
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
legend: {
orient: 'vertical',
x: 'left',
data: ['直達', '營銷廣告', '搜索引擎', '郵件營銷', '聯盟廣告', '視頻廣告', '百度', '谷歌', '必應', '其他']
},
toolbox: {
show: true,
feature: {
mark: { show: true },
dataView: { show: true, readOnly: false },
magicType: {
show: true,
type: ['pie', 'funnel']
},
restore: { show: true },
saveAsImage: { show: true }
}
},
calculable: false,
series: [{
name: '訪問來源',
type: 'pie',
selectedMode: 'single',
radius: [0, 70],
// for funnel
x: '20%',
width: '40%',
funnelAlign: 'right',
max: 1548,
itemStyle: {
normal: {
label: {
position: 'inner'
},
labelLine: {
show: false
}
}
},
data: [
{ value: 335, name: '直達' },
{ value: 679, name: '營銷廣告' },
{ value: 1548, name: '搜索引擎'}
]
},
{
name: '訪問來源',
type: 'pie',
radius: [100, 140],
// for funnel
x: '60%',
width: '35%',
funnelAlign: 'left',
max: 1048,
data: [
]
}
]
};
myChart.setOption(option);
var ecConfig = require('echarts/config');
myChart.on(ecConfig.EVENT.PIE_SELECTED, function(param) {
var selected = param.selected;
var serie;
for (var idx in selected) { //idx指示具體是哪一個同心圓,其中最里面的同心圓是'0',注意該值是字符串
serie = option.series[idx];
for (var i = 0, l = serie.data.length; i < l; i++) {
//i代表同一個同心圓第幾部分,即series中data的第幾條數據
if (selected[idx][i]) {
//通過對idx和i值的判斷,可以確定點擊的是哪一部分,然后對option進行操作
if (idx === "0") {
if (i === 0) {
option.series[1].data = [{ value: 335, name: '直達' }];
} else if (i === 1) {
option.series[1].data = [
{ value: 310, name: '郵件營銷' },
{ value: 234, name: '聯盟廣告' },
{ value: 135, name: '視頻廣告' }
];
} else{
option.series[1].data = [
{ value: 1048, name: '百度' },
{ value: 251, name: '谷歌' },
{ value: 147, name: '必應' },
{ value: 102, name: '其他' }
];
}
}
}
}
}
myChart.setOption(option, true);
})
})
}
</script>
</head>
<body>
<div id="platoBox">
</div>
</body>
</html>
