• Echarts设置饼状图保证你看的明明白白


    简单的饼状图

    html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>ECharts-动画title>
      <script src="https://cdn.staticfile.net/echarts/4.9.0-rc.1/echarts.js">script>
    head>
    <div style="width: 780px;height: 400px;" id="box">div>
    body>
    <script>
      let myChart = echarts.init(document.querySelector('#box'))
      // 第一个颜色是从正上方开始的
      let option = {
        tooltip: {
          trigger: 'item'
        },
        series: [
          {
            type: 'pie',
            center: ['40%', '50%'], // 饼状图的位置
            /**
             * radius:饼状图的大小
             * 它是一个数组,第1个值表示里面的圆的大小
             * 第2个值表示外面的圆的大小
             * */ 
            radius: ['45%', '60%'], 
            data: [
              { value: 1048, name: '名称1' },
              { value: 735, name: '名称2' },
              { value: 580, name: '名称3' },
              { value: 484, name: '名称4' },
              { value: 300, name: '名称5' }
            ]
          }
        ]
      }
      myChart.setOption(option);
    script>
    
    html>
    

    给饼状图设置渐变色

    ...其他配置,
    data:[ 相关数据],
    itemStyle: {
      normal: {
        label: {
          padding: [0, 0],
          alignTo: 'labelLine'
        },
        color: (list) => {
          let colorList = [
          {  
            "colorStart": "#FF9800",  
            "colorEnd": "#FFD180"  
          },  
          {  
            "colorStart": "#673AB7",  
            "colorEnd": "#9575CD"  
          },
          {  
            "colorStart": "#0F9D58",  
            "colorEnd": "#4CAF50"  
          }, 
          {  
            "colorStart": "#00BCD4",  
            "colorEnd": "#64FFDA"  
          },
          {  
            "colorStart": "#E91E63",  
            "colorEnd": "#FF80AB"  
          },
          ]
          return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
            {
              //左、下、右、上
              offset: 0,
              color: colorList[list.dataIndex]["colorStart"],
            },
            {
              offset: 1,
              color: colorList[list.dataIndex]["colorEnd"],
            },
          ]);
        }
      }
    },
    

    给饼状图外围配置一条虚线

    { //最外部细虚线
      // 类型是仪表盘
      type: 'gauge',
      // 位置必须和饼状图的一样,否者设置出来会有偏差
      center: ['40%', '50%'],
      /**
        * startAngle:仪表盘起始角度。
        * 圆心正右手侧为0度,正上方为90度,正左手侧为180度。
        * 就是说:逆时针
        * */
      startAngle: 270,
      // endAngle:仪表盘结束角度。最初值是:-89.9999,
      endAngle: -90,
      // 设置虚线的大小
      radius: '75%',
      // 不要显示刻度,因为仪表盘式有刻度样式的;我们这里只要圆,不要刻度
      // 如果设置为 show: true,就会显示刻度样式
      axisTick: {
        show: false
      },
      // false 不显示标签
      axisLabel: {
        show: false
      },
      // 仪表盘刻度的分割段数,这里表现是外层虚线之间的间距
      // splitNumber: 65 更加直接的表现是外层有65段虚线
      splitNumber: 65,
      axisLine: {
        // 不显示仪表盘轴线。如果设置为true,外层虚线就看不见
        show: false,
        // lineStyle:仪表盘轴线样式。
        // lineStyle: {
        //   // 仪表盘的轴线可以被分成不同颜色的多段,我们这里始终是同一个颜色 [1, '#E5E6E8']
        //   color: [
        //   [0.1, 'red'], // 0~10% 红轴
        //   [0.2, 'green'], // 10~20% 绿轴
        //   [0.3, 'blue'], // 20~30% 蓝轴
        //   ],
        //   width: 10
        // }
      },
      // 分隔线样式。
      splitLine: {
        show: true, // 是否显示分隔线。 如果设置为true,外层虚线才能看见
        length: 1, // 分隔线与轴线的距离。这里表现是虚线的宽度
        lineStyle: {
          width: 10, // 分隔线线长。支持相对半径的百分比。
          color: '#E5E6E8', // 线的颜色
        }
      },
      // 仪表盘详情,用于显示数据。
      detail: {
        show: false
      },
    },
    

    视觉引导线配置

    ...其他配置,
    data:[ 相关数据],
    // 标签的视觉引导线配置
    labelLine: {
      show: true, // 是否显示视觉引导线
      length: 20, // 视觉引导线第一段的长度。 
      length2: 40,  // 视觉引导项第二段的长度。 
      lineStyle: {
        color: '#E5E6E8', // 这里设置扇线颜色为灰色
        width: 1, // 线段宽度  
        type: 'solid', // 线段类型,默认为实线 
      }
    },
    


    为什么hover的时候视觉引导线发生了变化?

    我看官网都不会发生变化.
    是与版本有关还是配置项有关
    

    hover时视觉引导线和对应的名称样式不发生改变

    ...其他配置,
    data:[ 相关数据],
     // 高亮状态的扇区和标签样式 设置饼图外围虚线
    emphasis: {
      // 这里设置悬停时引导线对应名称的颜色,与非悬停时保持一致
      label: {
          color: '#333333' 
      },
      labelLine: {
        // 这里设置悬停时引导线的颜色,与非悬停时保持一致
        lineStyle: {
            color: '#E5E6E8' 
        }
      }
    }
    

    可以自定义富文本样式

    ...其他配置,
    data:[ 相关数据],
     // 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
      label: {
        show: true,
        // 标签的位置。
        position: 'outside',
        normal: {
          textStyle: {
            color: '#333333' // 设置引导线外层文字描述的颜色
          },
          // 字符串模板 模板变量有:
          // {a}:系列名。
          // {b}:数据名。
          // {c}:数据值。
          // {d}:百分比。
          formatter: '{aisB1| {b}}, {aisC1| {c}} {aisD1|{d}%}',
          padding: [0, -40], // 设置标签距离引导线水平方向的距离
          rich: {
            aisB1: {
              color: '#333333',
              //这里还有其他属性;大家可以去查看
            },
            aisC1:{
              color: '#333333',
            },
            aisD1: {
              color: '#333333', // 这是数据值的颜色
            },
          }
        }
      },
    

    名称在引导线的上方-使用\n

    因为是使用的是4.9的版本;
    所以设置名称在引导线的上方使用了一点技巧;
    那就是换行符 \n
    formatter: '{aisB1| {b}}, {aisC1| {c}} {aisD1|{d}%}\n\n',
    

    名称在引导线的上方-使用labelLayout 需要再5.0以上版本

    ...其他配置,
    data:[ 相关数据],
    // 从 v5.0.0 开始支持
    labelLayout:{
      // 标签垂直对齐方式,可以设置'top', 'middle', 'bottom'。
      verticalAlign:'bottom',
      // 标签在 y 方向上的像素偏移,设置标签在引导线的上方
      dy:-4
    },
    

    饼状图中间配置一个阴影圆

    // 配置里面的圆
      {
      type: 'gauge',
      center: ['40%', '50%'], // 饼状图的位置
      radius: '35%',
      // 如何是版本是4 这里是359.999;不能是360;否则圆环不能正常显示
      // 如果是版本是5,这里可以是360
      startAngle: 359.999,
      endAngle: 0,
      splitNumber: 4,
      zlevel: 10,
      axisLine: { // 坐标轴线
        lineStyle: { // 属性lineStyle控制线条样式
          color: [
            [1, '#fff']
          ],
          width: '100%',
          shadowColor: '#CDCDCD', //背景阴影颜色
          shadowOffsetX: 0, // X偏移量
          shadowOffsetY: 0, // Y偏移量
          shadowBlur: 10, // 模糊范围
        }
      },
      splitLine: { //分隔线样式
        show: false,
      },
      axisLabel: { //刻度标签
        show: false,
      },
      axisTick: { //刻度样式
        show: false,
      },
      detail: {
        show: false,
      },
      //仪表盘指针。
      pointer: {
        // 不显示仪表盘中的指针
        show: false,
      },
      title: {
        // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。
        // 可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
        offsetCenter: ['0%', "0%"],
        color: '#999999',
      },
      data: [{
        name: "2024-05-09\n15:36:25",
      }]
    },
    

    全部代码

    html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>ECharts-动画title>
      <script src="https://cdn.staticfile.net/echarts/4.9.0-rc.1/echarts.js">script>
      
    head>
    <div style="width: 780px;height: 400px;" id="box">div>
    body>
    <script>
      let myChart = echarts.init(document.querySelector('#box'))
      // 第一个颜色是从正上方开始的
      let option = {
        tooltip: {
          trigger: 'item'
        },
        series: [
          { //最外部细虚线
            // 类型是仪表盘
            type: 'gauge',
            // 位置必须和饼状图的一样,否者设置出来会有偏差
            center: ['40%', '50%'],
            /**
             * startAngle:仪表盘起始角度。
             * 圆心正右手侧为0度,正上方为90度,正左手侧为180度。
             * 就是说:逆时针
             * */
            startAngle: 270,
            // endAngle:仪表盘结束角度。最初值是:-89.9999,
            endAngle: -90,
            // 设置虚线的大小
            radius: '75%',
            // 不要显示刻度,因为仪表盘式有刻度样式的;我们这里只要圆,不要刻度
            // 如果设置为 show: true,就会显示刻度样式
            axisTick: {
              show: false
            },
            // false 不显示标签
            axisLabel: {
              show: false
            },
            // 仪表盘刻度的分割段数,这里表现是外层虚线之间的间距
            // splitNumber: 65 更加直接的表现是外层有65段虚线
            splitNumber: 65,
            axisLine: {
              // 不显示仪表盘轴线。如果设置为true,外层虚线就看不见
              show: false,
              // lineStyle:仪表盘轴线样式。
              // lineStyle: {
              //   // 仪表盘的轴线可以被分成不同颜色的多段,我们这里始终是同一个颜色 [1, '#E5E6E8']
              //   color: [
              //   [0.1, 'red'], // 0~10% 红轴
              //   [0.2, 'green'], // 10~20% 绿轴
              //   [0.3, 'blue'], // 20~30% 蓝轴
              //   ],
              //   width: 10
              // }
            },
            // 分隔线样式。
            splitLine: {
              show: true, // 是否显示分隔线。 如果设置为true,外层虚线才能看见
              length: 1, // 分隔线与轴线的距离。这里表现是虚线的宽度
              lineStyle: {
                width: 10, // 分隔线线长。支持相对半径的百分比。
                color: '#E5E6E8', // 线的颜色
              }
            },
            // 仪表盘详情,用于显示数据。
            detail: {
              show: false
            },
          },
          // 圆环
          {
            type: 'pie',
            center: ['40%', '50%'], // 饼状图的位置
            /**
             * radius:饼状图的大小
             * 它是一个数组,第1个值表示里面的圆的大小
             * 第2个值表示外面的圆的大小
             * */
            radius: ['45%', '60%'],
            itemStyle: {
              normal: {
                label: {
                  padding: [0, 0],
                  alignTo: 'labelLine'
                },
                color: (list) => {
                  let colorList = [
                    {
                      "colorStart": "#FF9800",
                      "colorEnd": "#FFD180"
                    },
                    {
                      "colorStart": "#673AB7",
                      "colorEnd": "#9575CD"
                    },
                    {
                      "colorStart": "#0F9D58",
                      "colorEnd": "#4CAF50"
                    },
                    {
                      "colorStart": "#00BCD4",
                      "colorEnd": "#64FFDA"
                    },
                    {
                      "colorStart": "#E91E63",
                      "colorEnd": "#FF80AB"
                    },
                  ]
                  return new echarts.graphic.LinearGradient(1, 0, 0, 0, [
                    {
                      //左、下、右、上
                      offset: 0,
                      color: colorList[list.dataIndex]["colorStart"],
                    },
                    {
                      offset: 1,
                      color: colorList[list.dataIndex]["colorEnd"],
                    },
                  ]);
                }
              }
            },
            // 标签的视觉引导线配置
            labelLine: {
              show: true, // 是否显示视觉引导线
              length: 20, // 视觉引导线第一段的长度。 
              length2: 50,  // 视觉引导项第二段的长度。 
              lineStyle: {
                color: '#E5E6E8', // 这里设置扇线颜色为灰色
                width: 1, // 线段宽度  
                type: 'solid', // 线段类型,默认为实线 
              }
            },
            // 从 v5.0.0 开始支持  标签的统一布局配置。
            labelLayout:{
              // 标签垂直对齐方式,可以设置'top', 'middle', 'bottom'。
              verticalAlign:'bottom',
              // 标签在 y 方向上的像素偏移,设置标签在引导线的上方
              dy:-4
            },
            // 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
            label: {
              show: true,
              // 标签的位置。
              position: 'outside',
              normal: {
                textStyle: {
                  color: '#333333' // 设置引导线外层文字描述的颜色
                },
                // 字符串模板 模板变量有:
                // {a}:系列名。
                // {b}:名称。
                // {c}:数据值。
                // {d}:百分比。
                formatter: '{aisB1| {b}}, {aisC1| {c}} {aisD1|{d}%}',
                padding: [0, -40], // 设置标签距离引导线水平方向的距离
                rich: {
                  aisB1: {
                    color: '#333333',
                  },
                  aisC1: {
                    color: '#333333',
                  },
                  aisD1: {
                    color: '#333333', // 这是数据值的颜色
                  },
                }
              }
            },
            data: [
              { value: 1048, name: '名称1' },
              { value: 735, name: '名称2' },
              { value: 580, name: '名称3' },
              { value: 484, name: '名称4' },
              { value: 300, name: '名称5' }
            ],
            // 高亮状态的扇区和标签样式 设置饼图外围虚线
            emphasis: {
              // 这里设置悬停时引导线对应名称的颜色,与非悬停时保持一致
              label: {
                color: '#333333'
              },
              labelLine: {
                // 这里设置悬停时引导线的颜色,与非悬停时保持一致
                lineStyle: {
                  color: '#E5E6E8'
                }
              }
            }
          },
    
           // 配置里面的圆
           {
            type: 'gauge',
            center: ['40%', '50%'], // 饼状图的位置
            radius: '35%',
            // 如何是版本是4 这里是359.999;不能是360;否则圆环不能正常显示
            // 如果是版本是5,这里可以是360
            startAngle: 359.999,
            endAngle: 0,
            splitNumber: 4,
            zlevel: 10,
            axisLine: { // 坐标轴线
              lineStyle: { // 属性lineStyle控制线条样式
                color: [
                  [1, '#fff']
                ],
                width: '100%',
                shadowColor: '#CDCDCD', //背景阴影颜色
                shadowOffsetX: 0, // X偏移量
                shadowOffsetY: 0, // Y偏移量
                shadowBlur: 10, // 模糊范围
              }
            },
            splitLine: { //分隔线样式
              show: false,
            },
            axisLabel: { //刻度标签
              show: false,
            },
            axisTick: { //刻度样式
              show: false,
            },
            detail: {
              show: false,
            },
            //仪表盘指针。
            pointer: {
              // 不显示仪表盘中的指针
              show: false,
            },
            title: {
              // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。
              // 可以是绝对的数值,也可以是相对于仪表盘半径的百分比。
              offsetCenter: ['0%', "0%"],
              color: '#999999',
            },
            data: [{
              name: "2024-05-09\n15:36:25",
            }]
          },
        ]
      }
      myChart.setOption(option);
    script>
    
  • 相关阅读:
    Var let const 重复声明问题,以及三种区别
    蚱蜢优化算法(Matlab代码实现)
    12.Babel
    Spring Boot事件机制浅析
    了解 Xcode 工作区、项目、方案和目标如何协同工作
    [界面开发]DevExpress WinForms流程图控件——XtraDiagrams组件入门指南
    Jmeter快速入门
    在windows Server安装Let‘s Encrypt的SSL证书
    Flutter中同步与异步
    Java SPI 二 之 Java APT原理及APT实战 - 一步步教你写ButterKnife
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/18182022