1. 程式人生 > >echarts餅圖不顯示資料為0的資料

echarts餅圖不顯示資料為0的資料

首先闡述下為什麼會有這個需求,這個和echarts自身的顯示效果有關。

如果你選擇的展示圖形為餅圖,然後你的資料裡有一條資料為0,那麼展示的資料就為一條直線,看上去效果並不好,

會很突兀。

當然如果你的業務需求就算是直線的話也要展示出來,那麼下面的文章你可以略過了,對你畫圖表並沒有什麼幫助。

言歸正傳,我這裡會結合程式碼和圖給大家看看效果,首先看看資料為0時的效果。效果如下


附上程式碼:

<html>
<head>
	<title>echarts測試</title>
	<script type="text/javascript" src="echarts.js"></script>
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
</head>
<body>
	 <!-- 為 ECharts 準備一個具備大小(寬高)的 DOM -->
    <div id="main" style="width: 600px;height:800px;"></div>
    <script type="text/javascript">
        // 基於準備好的dom,初始化echarts例項
        var myChart = echarts.init(document.getElementById('main'));
 
        var option = {
            tooltip : {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            title: {
                text: '某站點使用者訪問來源',
                subtext: '純屬虛構',
                x:'center'
            },
            legend: {
                orient: 'vertical',
                left: 'left',
                //這個為提示條,注意名稱要和data裡的name一一對應
                data: ['視訊廣告','聯盟廣告', '郵件營銷', '直接訪問',"搜尋引擎","黑客"]
            },

            series : [
                {
                    name: '訪問來源',
                    type: 'pie',
                    radius: '55%', 

                    data:[
                        {value:235, name:'視訊廣告'},
                        {value:274, name:'聯盟廣告'},
                        {value:310, name:'郵件營銷'},
                        {value:335, name:'直接訪問'},
                        {value:1400, name:'搜尋引擎'},
                        {value:0, name:'黑客'}

                        // {value:0, name:'黑客',itemStyle:{
                        //    normal:{
                        //         label:{
                        //             show: true,
                        //             formatter: function (params,option) {
                        //                 if(params.data.value == 0){
                        //                     // params.data.itemStyle.normal.labelLine.show = false;
                        //                     params.data.label.normal.show = false; 
                        //                     params.data.labelLine.normal.show = false;    
                        //                 }
                        //             },
                        //         },
                        //         labelLine: {
                        //             show: true
                        //         }
                        //    }
                        // }}
                    ]
                }
            ]
        }

//         var opt = option.series[0];
// lineHide(opt);
// //資料為零時隱藏線段
// function lineHide(opt) {
//     jQuery.each(opt.data, function (i, item) {
//         if (item.value == 0) {
//             item.itemStyle.normal.labelLine.show = false;
//             item.itemStyle.normal.label.show = false;
//         }
//     });
// }

        // 使用剛指定的配置項和資料顯示圖表。
        myChart.setOption(option);
    </script>
</body>
</html>


是不是很難受。

下面我這裡介紹下將0資料不在餅圖上顯示的幾種方式。

現附上最終效果圖:


1.在後臺數據處理時候講資料結果為0的資料過濾掉(這個大家根據業務情況做處理,這裡只講述下思路,不做具體展示)

2.在option的定義裡處理(和第三個方法本質上是一樣的,2的方式對各個資料進行處理,更有針對性,而3對餅圖裡的所有資料都做統一處理,大家根據需要進行選擇)

附上程式碼:

<html>
<head>
	<title>echarts測試</title>
	<script type="text/javascript" src="echarts.js"></script>
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
</head>
<body>
	 <!-- 為 ECharts 準備一個具備大小(寬高)的 DOM -->
    <div id="main" style="width: 600px;height:800px;"></div>
    <script type="text/javascript">
        // 基於準備好的dom,初始化echarts例項
        var myChart = echarts.init(document.getElementById('main'));
 
        var option = {
            tooltip : {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            title: {
                text: '某站點使用者訪問來源',
                subtext: '純屬虛構',
                x:'center'
            },
            legend: {
                orient: 'vertical',
                left: 'left',
                //這個為提示條,注意名稱要和data裡的name一一對應
                data: ['視訊廣告','聯盟廣告', '郵件營銷', '直接訪問',"搜尋引擎","黑客"]
            },

            series : [
                {
                    name: '訪問來源',
                    type: 'pie',
                    radius: '55%', 

                    data:[
                        {value:335, name:'直接訪問'},
                        {value:310, name:'郵件營銷'},
                        {value:234, name:'聯盟廣告'},
                        {value:135, name:'視訊廣告'},
                        {value:1548, name:'搜尋引擎'},
                        // {value:0, name:'黑客'}
                        //注意:這種方式,這個過濾只針對黑客這個屬性,其他屬性如果為0的話還是會顯示的,
                        //這個是具體根據某個屬性做的設定,如果需要對所有的屬性都做處理,推薦使用第三種
                        {value:0, name:'黑客',itemStyle:{
                           normal:{
                                label:{
                                    show: true,
                                    formatter: function (params,option) {
                                        if(params.data.value == 0){
                                            // params.data.itemStyle.normal.labelLine.show = false;
                                            params.data.label.normal.show = false; 
                                            params.data.labelLine.normal.show = false;    
                                        }
                                    },
                                },
                                labelLine: {
                                    show: true
                                }
                           }
                        }}
                    ]
                }
            ]
        }

//         var opt = option.series[0];
// lineHide(opt);
// //資料為零時隱藏線段
// function lineHide(opt) {
//     jQuery.each(opt.data, function (i, item) {
//         if (item.value == 0) {
//             item.itemStyle.normal.labelLine.show = false;
//             item.itemStyle.normal.label.show = false;
//         }
//     });
// }

        // 使用剛指定的配置項和資料顯示圖表。
        myChart.setOption(option);
    </script>
</body>
</html>


3.寫一個函式,遍歷所有的資料,將為0的資料隱藏掉

附上程式碼:

<html>
<head>
	<title>echarts測試</title>
	<script type="text/javascript" src="echarts.js"></script>
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
</head>
<body>
	 <!-- 為 ECharts 準備一個具備大小(寬高)的 DOM -->
    <div id="main" style="width: 600px;height:800px;"></div>
    <script type="text/javascript">
        // 基於準備好的dom,初始化echarts例項
        var myChart = echarts.init(document.getElementById('main'));
 
        var option = {
            tooltip : {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            title: {
                text: '某站點使用者訪問來源',
                subtext: '純屬虛構',
                x:'center'
            },
            legend: {
                orient: 'vertical',
                left: 'left',
                //這個為提示條,注意名稱要和data裡的name一一對應
                data: ['視訊廣告','聯盟廣告', '郵件營銷', '直接訪問',"搜尋引擎","黑客"]
            },

            series : [
                {
                    name: '訪問來源',
                    type: 'pie',
                    radius: '55%', 

                    data:[
                        //使用該種方法記得要加上itemStyle屬性,不然會找不到show屬性報錯的
                        {value:335, name:'直接訪問',itemStyle:{
                           normal:{
                                label:{
                                    show: true,
                                },
                                labelLine: {
                                    show: true
                                }
                           }
                        }},
                        {value:310, name:'郵件營銷',itemStyle:{
                           normal:{
                                label:{
                                    show: true,
                                },
                                labelLine: {
                                    show: true
                                }
                           }
                        }},
                        {value:234, name:'聯盟廣告',itemStyle:{
                           normal:{
                                label:{
                                    show: true,
                                },
                                labelLine: {
                                    show: true
                                }
                           }
                        }},
                        {value:135, name:'視訊廣告',itemStyle:{
                           normal:{
                                label:{
                                    show: true,
                                },
                                labelLine: {
                                    show: true
                                }
                           }
                        }},
                        {value:1548, name:'搜尋引擎',itemStyle:{
                           normal:{
                                label:{
                                    show: true,
                                },
                                labelLine: {
                                    show: true
                                }
                           }
                        }},
                        {value:0, name:'黑客',itemStyle:{
                           normal:{
                                label:{
                                    show: true,
                                },
                                labelLine: {
                                    show: true
                                }
                           }
                        }}
                    ]
                }
            ]
        }

        var opt = option.series[0];
        lineHide(opt);
        //資料為零時隱藏線段
        function lineHide(opt) {
            jQuery.each(opt.data, function (i, item) {
                if (item.value == 0) {
                    item.itemStyle.normal.labelLine.show = false;
                    item.itemStyle.normal.label.show = false;
                }
            });
        }

        // 使用剛指定的配置項和資料顯示圖表。
        myChart.setOption(option);
    </script>
</body>
</html>