echarts饼图同时设置两个label标签产生的问题?

image.png
echarts饼图同时设置两个label标签,内(显示百分比)外(显示数据和文字描述)后,判断当一个数据为零时(目前只有两个数据),另一个数据百分比无法在整个饼图中垂直水平居中,怎么解决?
代码如下:
难道是我这个需求过分了吗

 initPieChart(totalBalance, privateTotalBalance) {
      privateTotalBalance = 2000000000;
      totalBalance = 0;
      if (!!this.$refs.piecharts) {
        var myChart = echarts.init(this.$refs.piecharts);
        myChart.setOption({
          color: ["#228BFF", "#FFB218"],
          padding: [-80, 0],
          series: [
            {
              type: "pie",
              radius: "70%",
              left: "center",
              position: "outer",
              startAngle: "45",
              width: 680,
              // minAngle: 10, //最小的扇区角度(0 ~ 360),用于防止某个值过小导致扇区太小影响交互
              // avoidLabelOverlap: true, //是否启用防止标签重叠策略
              label: {
                alignTo: "edge",
                padding: [0, 5],
                lineHeight: 0,
                formatter(v) {
                  var text = v.name;
                  var value_format = filterMoney(v.value);
                  console.log(v.value, "dadada");
                  let data = v.data;
                  if (data.value > 0) {
                    data.label.show = true;
                    data.labelLine.show = true;
                  }
                  console.log(data, "dota");
                  // let percent_format = v.percent + "%";
                  if (value_format.length <= 13) {
                    return (text = `{a|${value_format.slice(
                      0,
                      13
                    )}}\n{b|${text}}`);
                  } else if (
                    value_format.length > 13 &&
                    value_format.length <= 18
                  ) {
                    return (text = `{a|${value_format.slice(
                      0,
                      18
                    )}}\n{b|${text}}`);
                  } else if (
                    value_format.length > 18 &&
                    value_format.length <= 24
                  ) {
                    return (text = `{a|${value_format.slice(
                      0,
                      18
                    )}}\n{b|${b}}`);
                  } else if (
                    value_format.length > 24 &&
                    value_format.length <= 30
                  ) {
                    return (text = `{a|${value_format.slice(
                      0,
                      10
                    )}}\n{b|${text}}`);
                  } else if (value_format.length > 30) {
                    return (text = `{a|${value_format.slice(
                      0,
                      10
                    )}}\n{b|${text}}`);
                  }
                },
                edgeDistance: 0,
                // emphasis: {
                //   itemStyle: {
                //     borderColor: "#fff",
                //     borderWidth: 2,
                //   },
                // },
                rich: {
                  a: {
                    fontSize: 12,
                    color: "#2e2f30",
                    lineHeight: 20,
                  },
                  b: {
                    fontSize: 12,
                    color: "#999",
                    lineHeight: 20,
                  },
                },
              },
              labelLine: {
                length: 15,
                length2: 140,
                // maxSurfaceAngle: 1,
              },
              data: [
                {
                  name: "活期金额 ",
                  value: totalBalance,
                  label: { show: false },
                  labelLine: { show: false },
                },
                {
                  name: "定期金额 ",
                  value: privateTotalBalance,
                  label: { show: false },
                  labelLine: { show: false },
                },
              ],
            },
            {
              radius: "70%", //饼图的半径大小
              type: "pie",
              startAngle: "45",

              hoverAnimation: true, //防止饼图点击放大
              // minAngle: 20, //最小的扇区角度(0 ~ 360),用于防止某个值过小导致扇区太小影响交互
              // avoidLabelOverlap: true, //是否启用防止标签重叠策略
              label: {
                fontSize: 10,
                formatter(v) {
                  let data2 = v.data;
                  if (data2.value > 0) {
                    data2.label.show = true;
                  }
                  return `${v.percent}%`;
                },
                position: "inner",
                lineHeight: 0,
              },
              data: [
                {
                  value: totalBalance,
                  label: { show: false },
                },
                {
                  value: privateTotalBalance,
                  label: { show: false },
                  // itemStyle:{ normal:{ label:{ show: false }}}
                },
              ],
              // itemStyle: {
              //   emphasis: {
              //     borderWidth: 1.5,
              //     borderColor: "#fff",
              //   },
              // },
            },
          ],
        });
      }
    },
阅读 3.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题