wuhaozhou

echarts 图表中经常需要对不同的颜色设置图例标识不同的意义,而仪表盘的指针只存在一个值,如何表示不同颜色的意义,官网配置项并未给出该功能;

不同段的颜色是通过axisLine->lineStyle->color来设置的;

搜索了很多的资料都没有找到用来标识各颜色段的图例;

反复琢磨,可不可以使用有图例的图来强制加上这个图例呢?

这里熟悉echarts的童鞋可能想到解决方法了;

那我们就来使用一招“移花接木”大法;

主要思想:使用柱状图的legend图例,然后设置柱状图和仪表图的层级,然后再隐藏柱状图,禁用legend的点击事件;

注意点:

  1.series中既有type为‘gauge’的配置项,也有type为‘bar’的配置项,而\'bar\'类型的配置项只要关注其legend的颜色即可;

  2.对于柱状图要隐藏的项较多,必须全部设置成不显示,其中包括轴线和分割线等;

  3.防止奇怪的体验最好将legend的点击事件禁用掉;

  var  option = {
                 legend: {     //配置legend,这里的data,要对应type为‘bar’的series数据项的‘name’名称,作为图例的说明
                     data:[\'预热期\',\'导入期\',\'成长期\',\'成熟期\',\'衰退期\'],
                     selectedMode:false,  //图例禁止点击
                     top:20,
                     itemWidth:23,
                     itemHeight:6,
                     textStyle: {
                         color: \'#707070\',
                         fontStyle: \'normal\',
                         fontWeight: \'normal\',
                         fontFamily: \'sans-serif\',
                         fontSize: 11,
                     },
                 },
                 grid: { 
                     z:1,    //grid作为柱状图的坐标系,其层级要和仪表图层级不同,同时隐藏
                     show:false,
                     left: \'-30%\',
                     right: \'4%\',
                     bottom: \'3%\',
                     containLabel: true,
                     splitLine:{
                         show: false    //隐藏分割线
                     },

                 },
                 xAxis : [   //这里有很多的show,必须都设置成不显示
                     {
                         type : \'category\',
                         data : [],
                         axisLine: {
                             show: false
                         },
                         splitLine:{
                             show: false
                         },
                         splitArea: {
                             interval: \'auto\',
                             show: false
                         }
                     }
                 ],
                 yAxis : [ //这里有很多的show,必须都设置成不显示
                     {
                         type : \'value\',
                         axisLine: {
                             show: false
                         },
                         splitLine:{
                             show: false
                         },
                     }
                 ],
                 toolbox: {   
                    show: false,
                 },
                series : [   
                         {
                        name:\'刻度盘\',
                        type: \'gauge\',
                        startAngle: 180,
                        endAngle: 0,
                        "center": ["50%", "80%"], //整体的位置设置
                        z: 3,
                        min: min,
                        max: max+min,
                        splitNumber: max,
                        radius: \'110%\',
                        axisLine: {            // 坐标轴线
                            lineStyle: {       // 属性lineStyle控制线条样式
                                width: 10,
                                color:optionUsedColors
                            }
                        },
                        axisTick: {            // 坐标轴小标记
                            length: 19,        // 属性length控制线长
                            splitNumber: 2,
                            lineStyle: {       // 属性lineStyle控制线条样式
                                color: \'#cdcdcd\'
                            }
                        },
                        splitLine: {           // 分隔线
                             length: 20,         // 属性length控制线长
                             lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
                                 color: \'auto\'
                             }
                        },
                        axisLabel: {
                            textStyle: {
                                color:\'#454A57\'
                            }
                        },
                        pointer: {
                            show: true,
                            length: \'70%\',
                            width: 5,
                        },
                        itemStyle:{
                            normal:{
                                color:\'#454A57\',
                                borderWidth:0
                            }
                        },
                        title: {   //仪表盘标题
                            show: true,
                            offsetCenter: [\'0\', \'20\'],
                            textStyle: {
                                color: \'#444A56\',
                                fontSize: 12,
                                fontFamily: \'Microsoft YaHei\'
                            }
                        },
                        detail: {
                            textStyle: {
                                fontSize: 12,
                                color: \'#707070\'
                            },
                            offsetCenter: offsetConfig,
                            formatter: function(){
                                return \'上市时间\n\'+time;
                            }
                        },
                        data:[{value: (status/100*max || 0), name: \'当前阶段\'}]
                    },
                         {
                        name: \'灰色内圈\',
                        type: \'gauge\',
                        z:2,
                        radius: \'110%\',
                        startAngle: 180,
                        endAngle: 0,
                        "center": ["50%", "80%"], //整体的位置设置
                        splitNumber: 4,
                        axisLine: { // 坐标轴线
                            lineStyle: { // 属性lineStyle控制线条样式
                                color: [
                                    [1, \'#F2F4F8\']
                                ],
                                width: 24,
                                opacity: 1,
                            }

                        },
                        splitLine: { //分隔线样式
                            show: false,
                        },
                        axisLabel: { //刻度标签
                            show: false,
                        },
                        axisTick: { //刻度样式
                            show: false,
                        },
                        detail : {
                            show:false,
                            textStyle: {       // 其余属性默认使用全局文本样式,详见TEXTSTYLE
                                fontWeight: \'bolder\',
                                fontSize:12
                            }
                        },
                    },
                         {
                             name:\'预热期\',
                             type:\'bar\',
                             barWidth: \'60%\',  //不显示,可以随便设置
                             data:[0],
                             itemStyle: {
                                 normal: {
                                     color: \'#41C468\',  //这里的图例要注意,颜色设置和仪表盘的颜色对应起来
                                 }
                             }
                         },
                         {
                             name:\'导入期\',
                             type:\'bar\',
                             barWidth: \'60%\',
                             data:[0],
                             itemStyle: {
                                 normal: {
                                     color: \'#70C1B3\',
                                 }
                             }
                         },
                         {
                            name:\'成长期\',
                            type:\'bar\',
                            barWidth: \'60%\',
                            data:[0],
                            itemStyle: {
                                normal: {
                                    color: \'#00A1E9\',
                                }
                            }
                        },
                         {
                             name:\'成熟期\',
                             type:\'bar\',
                             barWidth: \'60%\',
                             data:[0],
                             itemStyle: {
                                 normal: {
                                     color: \'#EE4444\',
                                 }
                             }
                         },
                         {
                             name:\'衰退期\',
                             type:\'bar\',
                             barWidth: \'60%\',
                             data:[0],
                             itemStyle: {
                                 normal: {
                                     color: \'#DCF2C4\',
                                 }
                             }
                         }
                ]
            }    

最终的效果图如下,是不是很简单呢。

 

分类:

技术点:

相关文章: