有标签的关系旭日图

描述:当前是关于Echarts图表中的 旭日图 示例。
 
            
const {
          redFlower, // 红花种类
          whiteFlower, // 白花种类
          lessThanStandardRate, // 小于标准
          greaterThanStandardRate, // 大于标准
          greaterThanOverallRate, // 大于整体占比
          lessThanOverallRate, // 小于整体占比
        }
       = {
            redFlower:17, // 红花种类
            whiteFlower:83, // 白花种类
            lessThanStandardRate:20.83, // 小于标准
            greaterThanStandardRate:79.17, // 大于标准
            greaterThanOverallRate:65.52, // 大于整体占比
            lessThanOverallRate:17.24, // 小于整体占比
        }
option = {
   series:[
          {
            type: 'sunburst',
            nodeClick: false, // 是否允许旭日图点击 默认可以点击
            center: ['50%', '50%'],
            radius: ['50%', '60%'],
            sort: 'null',
            startAngle: 145,
            silent: true, // 不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件
            labelLayout: {
              moveOverlap: 'shiftY',//在标签重叠的时候是否挪动标签位置以防止重叠。shiftY:垂直方向依次位移,在垂直方向对齐时使用
              hideOverlap: false,//是否隐藏重叠的标签
            },
            // 旭日图的分割线 可通过调节圆的大小实现空白间隙
            // itemStyle: {
            //   borderColor: 'transparent',
            //   borderWidth: 0,
            //   borderRadius: 0,
            // },
            data: [
              {
                name: '白花种类',
                value: whiteFlower ?? 0,
                itemStyle: { color: '#358EFE' },
                // 标签
                label: {
                  show: true,
                  borderColor: 'transparent',
                  borderWidth: 1,
                  padding: 6,
                  formatter: ['{a|{b}}', '{c|{c}%}'].join(''),//{c} 为数据值  
                  // 给指定标签设置样式
                  rich: {
                    a: {
                      align: 'left',
                      color: '#4E5969',
                      fontSize: 14,
                      fontWeight: 400,
                      padding: [0, 4, 0, 0],
                    },
                    c: {
                      align: 'left',
                      color: '#4E5969',
                      fontSize: 16,
                      fontWeight: 600,
                    },
                  },
                },
                //标签的视觉引导线配置。
                labelLine: {
                  show: true,
                  showAbove: true,//是否显示在图形上方
                  length2: 6,//视觉引导项第二段的长度
                  minTurnAngle: 0,//通过调整第二段线的长度,限制引导线两端之间最小的夹角,以防止过小的夹角导致显示不美观。可以设置为 0 - 180 度。 
                               
                },

                children: [
                  {
                    value: lessThanOverallRate ?? 0,
                    name: '百合',
                    itemStyle: { color: 'rgba(53, 142, 254, 0.20)' },
                    label: {
                      formatter: ['{a|{b}}', `{b|${lessThanStandardRate ?? 0}%}`, '\n', '{c|(整体占比 {c}%)}'].join(''),
                      rich: {
                        a: {
                          align: 'left',
                          color: '#4E5969',
                          fontSize: 14,
                          fontWeight: 400,
                          padding: [0, 4, 0, 0],
                        },
                        b: {
                          align: 'left',
                          color: '#4E5969',
                          fontSize: 16,
                          fontWeight: 600,
                          fontFamily: 'DINAlternate-Bold, DINAlternate',
                        },
                        c: {
                          align: 'left',
                          color: 'rgba(136, 136, 136, .9)',
                          fontSize: 12,
                          fontWeight: 400,
                          padding: [4, 0, 0, 0],
                          fontFamily: 'DINAlternate-Bold, DINAlternate',
                        },
                      },
                    },
                    labelLine: {
                      show: true,
                      showAbove: true,
                      length2: 8,
                    },
                  },
                  {
                    value: greaterThanOverallRate ?? 0,
                    name: '茉莉',
                    itemStyle: { color: 'rgba(53, 142, 254, 0.50)' },
                    label: {
                      formatter: ['{a|{b}}', `{b|${greaterThanStandardRate ?? 0}%}`, '\n', '{c|(整体占比 {c}%)}'].join(''),
                      rich: {
                        a: {
                          align: 'left',
                          color: '#4E5969',
                          fontSize: 14,
                          fontWeight: 400,
                          padding: [0, 4, 0, 0],
                        },
                        b: {
                          align: 'left',
                          color: '#4E5969',
                          fontSize: 16,
                          fontWeight: 600,
                          fontFamily: 'DINAlternate-Bold, DINAlternate',
                        },
                        c: {
                          align: 'left',
                          color: 'rgba(136, 136, 136, .9)',
                          fontSize: 12,
                          padding: [4, 0, 0, 0],
                          fontFamily: 'DINAlternate-Bold, DINAlternate',
                        },
                      },
                    },
                    labelLine: {
                      show: true,
                      showAbove: true,
                      length2: 8,
                    },
                  },
                ],
              },
              {
                name: '红花种类',
                value: redFlower ?? 0,
                itemStyle: { color: '#12C2C1' },
                label: {
                  show: true,
                  formatter: ['{a|{b}}', '{c|{c}%}'].join(''),
                  rich: {
                    a: {
                      align: 'left',
                      color: '#4E5969',
                      fontSize: 14,
                      fontWeight: 400,
                      padding: [0, 4, 0, 0],
                    },
                    c: {
                      align: 'left',
                      color: '#4E5969',
                      fontSize: 16,
                      fontWeight: 600,
                      fontFamily: 'DINAlternate-Bold, DINAlternate',
                    },
                  },
                },
                labelLine: {
                  show: true,
                  showAbove: true,
                  length2: 6,
                },
                children: [{ value: parseFloat(100 - lessThanOverallRate - greaterThanOverallRate), name: '', itemStyle: { color: 'rgba(18, 194, 193, 0.60)' } }],
              },
            ],
            // 占据的位置 文字设置
            // label: {
            //   rotate: 'tangential', // 文字水平(tangential)竖直(radial)
            //   color: '#fff',
            //   fontSize: 14,
            //   minAngle: 30, // 控制角度文本显示
            // },

            levels: [
              // 这里是设置 每一层的样式,层级低于单独在data里面的
              // 第一个空数据是 占据下钻的位置
              {},
              // 内圈
              {
                r0: '48%',
                r: '63%',
                 // 鼠标移入高亮设置 设置了slient=true会失效
                emphasis: {
                  focus: 'none',
                },
                label: {
                  position: 'outside',//标签的位置
                  distance: 22,//距离图形元素的距离
                  rotate: 0, // 文字水平(tangential)竖直(radial)
                  minAngle: 0,//当某个扇形块的角度小于该值(角度制)时,扇形块对应的文字不显示。该值用以隐藏过小扇形块中的文字。
                  //以下三个设置可以让距离比较靠近的label有一定的间距,与html标签样式有点区别的是,这里需要设置一个border后再设置padding,padding内边距才会起效果
                  borderColor: 'transparent',//
                  borderWidth: 1,
                  padding: 4,
                },
 
              },
              // 外圈
              {
                r0: '63%',
                r: '77%',
                label: {
                  position: 'outside',
                  distance: 22,
                  rotate: 0, // 文字水平(tangential)竖直(radial)
                  alignTo: 'edge',
                  minAngle: 0,
                  borderColor: 'transparent',
                  borderWidth: 1,
                  padding: 4,
                },
                // 鼠标移入高亮设置
                emphasis: {
                  focus: 'none',
                },
              },
            ],
          },
        ]
};