echarts绘制一个饼图

其他echarts: 

qecharts绘制一个柱状图,柱状折线图

效果图:

代码:

<template>
  <div class="wrapper">
    <div ref="pieChart1" id="pieChart1"></div>
    <div ref="pieChart2" id="pieChart2"></div>
  </div>
</template>

<script>
export default {
  mixins: [],
  components: {},
  props: {
    table: {
      type: Object,
      default: {
        datas: {},
        color: [],
      },
      theme: {
        defalut: "dark",
      },
    },
  },
  data() {
    return {
      limitLength: 7, //显示name长度
    };
  },
  created() {},
  mounted() {},
  watch: {
    table: {
      handler(newVal) {
        if (newVal) {
          if (newVal.limitLength) this.limitLength = newVal.limitLength;
          // 进行数据处理操作
          this.option();
          this.option2();
        }
      },
    },
  },
  methods: {
    option() {
      let option = {
        tooltip: {
          // position: 'inner',
          trigger: "item",
          formatter: "{a} <br/>{b} : {c} ({d}%)",
        },
        toolbox: {
          show: true,
          feature: {
            mark: { show: true },
            // saveAsImage: { show: true },
          },
        },
        series: [
          {
            type: "pie",
            center:
              this.table.legendLocation == "left"
                ? ["60%", "50%"]
                : ["50%", "40%"],
            itemStyle: {
              // borderRadius: this.hollowOut ? 0 : 5,//元素的圆角
              //label指示线的颜色
              color: (params) => {
                var index = params.dataIndex;
                return this.table.color[index];
              },
            },
            label: {
              show: true,
              position: "outer", // 设置标签位置,默认在饼状图外 可选值:'outer' ¦ 'inner(饼状图上)'
              formatter: (series) => {
                // 设置不同的字体颜色
                return "{a|" + series.name + "}\n{b|" + series.value + "}";
              },
              rich: {
                a: {
                  fontSize: 12, // 第一个字的字号
                },
                b: {
                  fontSize: 16, // 第二个字的字号
                },
              },
            },
            emphasis: {
              //中间文字显示
              show: true,
            },
            data: this.table.datas.map((item, index) => {
              item.label = {
                // label的颜色
                color: this.table.color[index],
              };
              item.name = item.NAME;
              item.value = item.VALUE || item.NUM;
              return item;
            }),
          },
        ],
      };
      var chartDom = this.$refs.pieChart1;
      var myChart = this.$E.init(chartDom);
      myChart.setOption(option);
    },
    option2() {
      const option2 = {
        tooltip: {
          // position: 'inner',
          trigger: "item",
          // {a} <br/>
          formatter: "{b} : {c} ({d}%)",
        },
        legend: {
          textStyle: {
            color: this.theme === "dark" ? "#bfa" : "#333",
          },
          orient:
            this.table.legendLocation == "left" ? "vertical" : "horizontal",
          type: "scroll", //颜色过多可以滚动
          left: this.table.legendLocation == "left" ? 0 : "center",
          top: this.table.legendLocation == "left" ? "top" : "bottom",
          icon: this.table.legendIcon ? "circle" : "",
          formatter: (name) => {
            var seriesData = option2.series[0].data; // 数据在series的第几个中
            var total = 0;
            for (var i = 0; i < seriesData.length; i++) {
              total += seriesData[i].value;
            }
            for (var j = 0; j < seriesData.length; j++) {
              if (name === seriesData[j].name) {
                var percent = ((seriesData[j].value / total) * 100).toFixed(2);
                if (name.length > this.limitLength) {
                  return (
                    name.substring(0, this.limitLength) +
                    "..." +
                    " " +
                    seriesData[j].value +
                    " " +
                    percent +
                    "%"
                  );
                } else {
                  return name + " " + seriesData[j].value + " " + percent + "%";
                }
              }
            }
          },
        },
        toolbox: {
          show: true,
          feature: {
            mark: { show: true },
            // saveAsImage: { show: true },
          },
        },
        series: [
          {
            type: "pie",
            center:
              this.table.legendLocation == "left"
                ? ["60%", "50%"]
                : ["50%", "40%"],
            itemStyle: {
              // borderRadius: this.hollowOut ? 0 : 5,
              //每一个元素的颜色
              color: (params) => {
                var index = params.dataIndex;
                return this.table.color[index];
              },
            },
            label: {
              position: "inner", // 设置标签位置,默认在饼状图外 可选值:'outer' ¦ 'inner(饼状图上)'
              // formatter: '{a} {b} : {c}个 ({d}%)'   设置标签显示内容 ,默认显示{b}
              // {a}指series.name  {b}指series.data的name
              // {c}指series.data的value  {d}%指这一部分占总数的百分比
              formatter: "{d}%",
            },
            emphasis: {
              //中间文字显示
              show: true,
            },
            data: this.table.datas.map((item, index) => {
              item.label = {
                // label的颜色
                color: "#fff",
              };
              item.name = item.NAME;
              item.value = item.VALUE || item.NUM;
              return item;
            }),
          },
        ],
      };
      var chartDom2 = this.$refs.pieChart2;
      var myChart2 = this.$E.init(chartDom2);
      myChart2.setOption(option2);
      // 添加点击事件
      myChart2.on("click", function (params) {
        console.log(params.seriesIndex);
        if (params.componentType === "series") {
          let dataIndex = params.dataIndex; // 获取点击的数据索引
          let data = option2.series[params.seriesIndex].data[dataIndex]; // 获取点击的数据对象
          console.log(data);
        }
      });
    },
  },
};
</script>

<style scoped lang="scss">
.wrapper {
  width: 100%;
  height: 100%;
  position: relative;
  #pieChart1,
  #pieChart2 {
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    position: absolute;
    top: 0;
    left: 0;
  }
}
</style>

这是一个组件调用:

<NewPie
  :table="table"
  :theme="theme"
  :style="{ height: heightNew }"
/>
// heightNew : 动态计算的高度

入参:

/**
  "table": {
    "datas": [
      {
        "VALUE": 25,
        "NAME": "产假",
        "label": {
          "color": "#fff"
        },
        "name": "产假",
        "value": 25
      },
      {
        "VALUE": 6,
        "NAME": "公休",
        "label": {
          "color": "#fff"
        },
        "name": "公休",
        "value": 6
      },
      {
        "VALUE": 2,
        "NAME": "病假",
        "label": {
          "color": "#fff"
        },
        "name": "病假",
        "value": 2
      },
      {
        "VALUE": 1,
        "NAME": "事假",
        "label": {
          "color": "#fff"
        },
        "name": "事假",
        "value": 1
      },
      {
        "VALUE": 1,
        "NAME": "育儿假",
        "label": {
          "color": "#fff"
        },
        "name": "育儿假",
        "value": 1
      },
      {
        "VALUE": 1,
        "NAME": "工伤假",
        "label": {
          "color": "#fff"
        },
        "name": "工伤假",
        "value": 1
      }
    ],
    "color": [
      "#5470c6",
      "#91cc75",
      "#fac858",
      "#ee6666",
      "#73c0de",
      "#3ba272",
      "#fc8452",
      "#9a60b4",
      "#ea7ccc",
      "#8364FF",
      "#36F4D7",
      "#FBB03C"
    ],
    "legendLocation": "left",
    "legendIcon": "round"
  }
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225602.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CCF编程能力等级认证GESP—C++1级—20230611

CCF编程能力等级认证GESP—C1级—20230611 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)时间规划累计相加 答案及解析单选题判断题编程题1编程题2 单选题…

docker安装配置prometheus+node_export+grafana

简介 Prometheus是一套开源的监控预警时间序列数据库的组合&#xff0c;Prometheus本身不具备收集监控数据功能&#xff0c;通过获取不同的export收集的数据&#xff0c;存储到时序数据库中。Grafana是一个跨平台的开源的分析和可视化工具&#xff0c;将采集过来的数据实现可视…

2023年6月21日 Go生态洞察:Go 1.21版发行候选版的深入分析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

基于SpringBoot+Thymeleaf+Mybatis实现大学生创新创业管理系统(源码+数据库+项目运行指导文档)

一、项目简介 本项目是一套基于SpringBoot实现大学生创新创业管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#…

局域网共享打印机设置,解决709、11B等一切共享问题

Win7、Win10、Win11添加共享打印机经常出现局域网共享打印机出错&#xff0c;常规的添加方式是SMB共享&#xff0c;一更新就出问题&#xff0c;报错0x00000709、0x0000011b等。 网上有许多方法&#xff0c;如卸载更新补丁&#xff0c;替换“win32spl.dll”文件&#xff0c;修改…

排查200M宽带下行速度低于100M问题(七十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

sql注入 [GXYCTF2019]BabySQli1

打开题目 多次尝试以后我们发现存在一个admin的账号&#xff0c;但是密码我们不知道 我们尝试一下万能密码 admin or 11 -- q 报错 我们尝试bp抓一下包看看 看着很像编码 先去base32解码 再base64解码 得到 我们从这个sql语句中得到注入点为name 根据报错信息我们知道是…

Python语言基础知识(一)

文章目录 1、Python内置对象介绍2、标识符与变量3、数据类型—数字4、数据类型—字符串与字节串5、数据类型—列表、元组、字典、集合6、运算符和表达式7、运算符和表达式—算术运算符8、运算符和表达式—关系运算符9.1、运算符和表达式— 成员测试运算符in9.2、运算符和表达式…

vue+echarts实现桑吉图的效果

前言&#xff1a; 在我们项目使用图形的情况下&#xff0c;桑吉图算是冷门的图形了&#xff0c;但是它可以实现我们对多级数据之间数据流向更好的展示的需求&#xff0c;比如&#xff0c;我们实际数据流向中&#xff0c;具有1对多&#xff0c;多对多的情况下&#xff0c;如果用…

uni-app实现安卓原生态调用身份证阅读器读卡库读身份证和社保卡、银行卡、IC卡等功能

DONSEE系列多功能读写器Android Uniapp API接口规范V1.0.0 本项目Uniapp调用了身份证读卡器的库文件&#xff1a;DonseeDeviceLib-debug.aar&#xff0c;该库放到nativeplugins\donsee-card\android&#xff0c;然后会自动加载。SDK会自动检查是否拥有USB设备权限&#xff0c;…

关于物联网仪表ADW300 远传电表的详细介绍-安科瑞 蒋静

1概述 ADW300无线计量仪表主要用于计量低压网络的三相有功电能&#xff0c;具有体积小、精度高、功能丰富等优点&#xff0c;并且可选通讯方式多&#xff0c;可支持 RS485 通讯和 Lora、NB、4G、wifi 等无线通讯方式&#xff0c;增加了外置互感器的电流采样模式&#xff0c;从而…

数据结构与算法(五)回溯算法(Java)

目录 一、简介1.1 定义1.2 特性1.3 结点知识补充1.4 剪枝函数1.5 使用场景1.6 解空间1.7 实现模板 二、经典示例2.1 0-1 背包问题2.2 N皇后问题 一、简介 1.1 定义 回溯法&#xff08;back tracking&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条…

为什么 AWS 数据库不讲 HTAP

在 AWS re:Invent 2023 掌门人 Adam Selipsky 的 Keynote 上&#xff0c;数据库方面最重磅的主题是 Zero-ETL&#xff0c;从 TP 数据库 (RDS, Aurora, DynamoDB) 同步数据到 AP 数据库 (Redshift)。 Zero-ETL 是 AWS 在去年 re:invent 2022 上推出的概念&#xff0c;今年则继…

网络层之IP组播

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

【力扣】206.反转链表

206.反转链表 这道题有两种解法&#xff0c;但不只有两种&#xff0c;嘿嘿。 法一&#xff1a;迭代法 就是按循序遍历将每一个指针的指向都给改了。比如说1——>2——>3改为null<——1<——2<——3这样。那这里以第二个结点为例&#xff0c;想一想。我想要指向…

如何在Linux上部署1Panel运维管理面板并远程访问内网Web端管理界面

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

BPM、ERP、OA 各自的功能和特点是什么?怎么配合使用?

OA、BPM、ERP几乎是任何一家企业都会接触到的信息管理系统及程序。 首先&#xff0c;我从定义上理清BPM、ERP和OA ERP(Enterprise Resource Planning,企业资源计划)&#xff0c;一般围绕供应链、生产制造和财务为核心。 BPM&#xff08;business process management&#xf…

智能优化算法应用:基于野马算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于野马算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于野马算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.野马算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

如何使用Net2FTP轻松部署本地Web文件管理器并远程访问管理内网资源?

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

Cocos Creator加入图片没有被识别

原因&#xff0c;需要更换类型&#xff0c;选择下图中的类型