首页 > 其他分享 >使用方法添加分割的环形图,记录原因(不使用方法的会依赖背景色,背景框透明情况下会出现问题)

使用方法添加分割的环形图,记录原因(不使用方法的会依赖背景色,背景框透明情况下会出现问题)

时间:2023-05-15 14:48:17浏览次数:34  
标签:const name color value 背景色 item 下会 方法 dataArray

首先来看效果图:

代码如下:

<template>
  <div id="yiCdzEcharts" style="width: 130px; height: 230px;"></div>
</template>

<script>
export default {
  props: ["echartsData"],
  data() {
    return {
      pieData: [],
    };
  },
  mounted() {
    this.myecharts();
    this.WidthAdaptive();
  },
  watch: {
    echartsData(n, o) {
      this.myecharts();
    },
  },
  methods: {
    WidthAdaptive(res) {
      var windth = window.screen.width;

      let fontSize = windth / 1920;
      return fontSize * res;
    },
    myecharts() {
      let myChart = this.$echarts.init(document.getElementById("yiCdzEcharts"));
      myChart.clear();

      // mock 数据
      const dataArray = [
        {
          name: "监控类",
          value: 10,
        },
        {
          name: "楼宇自控",
          value: 15,
        },
        {
          name: "空调类",
          value: 12,
        },
        {
          name: "消防类",
          value: 8,
        },
        {
          name: "其他",
          value: 14,
        },
      ];

      // 计算总数
      const list = [];
      let total = dataArray.reduce((p, v) => {
        list.push(v.value);
        return p + v.value;
      }, 0);

      const color = ["#165DFF", "#45A2FF", "#8CBFF9", "#FAF252", "#FFAD0E"];

      var labelshow = true;
      var centerimg = true;
      var lineshow = false;
      let color1 = [];
      // 设置每层圆环颜色和添加间隔的透明色
      color.forEach((item) => {
        color1.push(item, "transparent");
      });
      let data1 = [];
      let sum = 0;
      // 根据总值设置间隔值大小
      dataArray.forEach((item) => {
        sum += Number(item.value);
      });

      //图表数据
      const countOccurences = (arr, value) =>
        arr.reduce((a, v) => (v === value ? a + 1 : a + 0), 0);
      const nums = countOccurences(list, 0);

      // 给每个数据后添加特定的透明的数据形成间隔
      if (nums < 1) {
        dataArray.forEach((item, index) => {
          if (item.value !== 0) {
            data1.push(item, {
              name: "",
              value: sum / 90,
              labelLine: {
                show: false,
                lineStyle: {
                  color: "transparent",
                },
              },
              itemStyle: {
                color: "transparent",
              },
            });
          } else if (item.value == 0) {
            data1.push(item);
          }
        });
      } else {
        dataArray.forEach((item, index) => {
          data1.push(item);
        });
      }

      //title
      const title = {
        text: "{a|" + total + "}\n{b|设备总数}",
        top: "50%",
        left: "32.5%",
        textStyle: {
          fontSize: this.WidthAdaptive(14),
          color: "#C9E5FF",
          fontFamily: "OPPOSans",
          fontWeight: "500",
          lineHeight: this.WidthAdaptive(20),
          rich: {
            a: {
              fontColor: "#3BCEFF",
              fontSize: this.WidthAdaptive(24),
              fontFamily: "Alimama ShuHeiTi",
              fontWeight: "normal",
              align: "center",
            },
            b: {
              fontSize: this.WidthAdaptive(12),
              fontColor: "#C9E5FF",
              fontFamily: "Source Han Sans CN",
              align: "center",
            },
          },
        },
      };

      const graphic = {
        elements: [
          {
            type: "image",
            style: {
              image: require("../img/pie.png"),
              width: this.WidthAdaptive(74),
              height: this.WidthAdaptive(74),
            },
            top: "44%",
            left: "27%",
            silent: true,
          },
        ],
      };

      // series itemStyle
      const items = {
        normal: {
          color: (params) => {
            if (params.data.name == dataArray[0].name) {
              return color[0];
            } else if (params.data.name == dataArray[1].name) {
              return color[1];
            } else if (params.data.name == dataArray[2].name) {
              return color[2];
            } else {
              return color1[params.dataIndex];
            }
          },
        },
      };

      // series
      const series = [
        {
          type: "pie",
          radius: ["64%", "75%"],
          center: ["55%", "60%"],
          hoverAnimation: false,
          itemStyle: items,
          label: {
            show: false,
          },
          data: data1,
        },
      ];

      // 渲染
      var option = {
        title,
        graphic,
        series,
        color,
      };
      myChart.setOption(option, true);

      window.onresize = myChart.resize;
    },
  },
};
</script>

<style scoped></style>

 

标签:const,name,color,value,背景色,item,下会,方法,dataArray
From: https://www.cnblogs.com/a973692898/p/17401809.html

相关文章

  • iframe里面的页面调用父窗口,左右窗口js函数的方法
     iframe里面的页面调用父窗口,左右窗口js函数的方法实现iframe内部页面直接调用该iframe所属父窗口自定义函数的方法。比如有A窗口,A内有个IFRAMEB,B里面的装载的是C页面,这时C要直接调用A里面的一个自定义函数AFUN();那么只要在C页面中写如下JS函数就可以了:window.parent.AFUN()......
  • 直播软件开发,JS生成随机字符串的方法
    直播软件开发,JS生成随机字符串的方法functionrandomString(randomLen,min,max){  varstr="",    range=min,    arr=['0','1','2','3','4','5','6','7','8�......
  • 将信号输入进行经验模态分解(EMD)及其 改进分解方法eemd分
    将信号输入进行经验模态分解(EMD)及其改进分解方法eemd分解、ceemd分解等分解方法,然后将信号复原,比较每种方法等误差。还有克服端点效应的方法,对信号进行极值延拓,然后进行eemd,Matlab代码ID:9728636012396631......
  • maven引入ojdbc14.jar的方法
    1、ojdbc14.jar的导入方法:①与导入其它jar包相同,在项目pom.xml文件中,可以采用Dependencies向导搜索并导入代码,可以发现其GroupId为com.oracle,ArtifactId为ojdbc14,目前最新版本为:10.2.0.4.0,因此有如下代码:com.oracleojdbc1410.2.0.4.0如果是其它一些常见的包,如Struts、Sprin......
  • k—medoids 聚类方法的MATLAB源代码,导入数据部分和画图部分已经用中文给出了注释。
    k—medoids聚类方法的MATLAB源代码,导入数据部分和画图部分已经用中文给出了注释。这儿选取一个对象叫做mediod来代替上面的中心的作用,这样的一个medoid就标识了这个类。ID:5315652511667870......
  • Java中String.spilt()方法的使用
    1、Java中可以使用String.spilt()方法按照指定的分隔符将字符串进行分割,然后返回字符串。2、测试demo:     ......
  • zabbix告警 Zabbix server: Utilization of housekeeper processes over 75% 解决方法
    原因分析为了防止数据库持续增大,Zabbix有自动删除历史数据的机制,即housekeeper,而在频繁清理历史数据的时候,MySQL数据库可能出现性能降低的情况,此时就会告警。一般来说,Zabbix都会监控ZabbixServer本身。如下所示,我们可以分析“Zabbixserver:Utilizationofhousekeeperinte......
  • MATLAB代码:基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法
    MATLAB代码:基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法关键词:合作博弈纳什谈判风–光–氢系统综合能源参考文档:《基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法》基本复现仿真平台:MATLAB平台优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非......
  • MATLAB代码:基于SOE算法的多时段随机配电网重构方法 关键词:配电网重构
    MATLAB代码:基于SOE算法的多时段随机配电网重构方法关键词:配电网重构SOE算法多时段随机重构参考文档:《SwitchOpeningandExchangeMethodforStochasticDistributionNetworkReconfiguration》完全复现仿真平台:MATLAB+CPLEX/gurobi平台优势:代码具有一定的深度和创新性,注......
  • MATLAB代码: 基于人工神经网络的电-气耦合系统快速经济调度的数据驱动方法。
    MATLAB代码:基于人工神经网络的电-气耦合系统快速经济调度的数据驱动方法。该代码基于人工神经网络的数据驱动方法,通过利用基于分段线性化的模型驱动方法的仿真数据,对电-气耦合综合能源系统进行快速经济调度。每个电气总线和气体节点处的负载分布作为输入神经元馈入人工神经网络;最......