echarts绘制一个柱状折线图

news2024/11/19 15:13:48

其他echarts: 

echarts绘制一个环形图

 echarts绘制一个饼图 

echarts绘制一个环形图2

效果:

代码:

<template>
  <div class="wrapper">
    <!-- 柱状图 -->
    <div v-if="type == 'new_bar'" ref="barChart" id="barChart"></div>
    <!-- 柱状图加折线图 -->
    <div v-else ref="barChart2" id="barChart2"></div>
  </div>
</template>

<script>
export default {
  mixins: [],
  components: {},
  props: {
    table: {
      type: Object,
      default: {
        datas: {},
        color: [],
      },
    },
    type: {
      type: String,
      default: "new_bar",
    },
  },
  data() {
    return {
      lineData: null,
      legendData: [], //一共有几个数据
      xAxis: {}, // X轴的显示
      yAxis: [], // Y轴的显示
      series: [],
    };
  },
  created() {},
  mounted() {},
  watch: {
    table: {
      handler(newVal) {
        if (newVal) {
          // 进行数据处理操作
          // console.log("柱状图", newVal);
          if (this.type == "new_barLine") {
            // 去重判断一共有几组数据
            this.legendData = this.$common.distinct(newVal.datas, "COL");
            this.legendData = this.legendData.map((item) => {
              return item.COL;
            });
            // 将所有数据根据col属性名相同的合并为一个新的对象
            this.lineData = this.$common.groupByProperty(newVal.datas, "COL");
            this.xAxis = [
              {
                type: "category",
                data: this.lineData[this.legendData[0]].map((item) => {
                  return item.NAME;
                }),
                axisLabel: {
                  rotate: 45, // 设置 x 轴名称逆时针旋转角度
                },
                axisPointer: {
                  type: "shadow",
                },
              },
            ];
            this.legendData.forEach((item, index) => {
              if (index > 0) {
                // 确定Y轴
                this.yAxis.push({
                  type: "value",
                  min: 0,
                  // interval: 5,
                  axisLabel: {
                    formatter: "{value}",
                  },
                });
                // 增加线
                this.series.push({
                  name: item,
                  type: "line",
                  smooth: true, //线变得有弧度
                  symbol: "none", //隐藏小圆点
                  color: newVal.color[index],
                  areaStyle: {
                    //折线图下边阴影
                    color: {
                      type: "linear",
                      x: 0,
                      y: 0,
                      x2: 0,
                      y2: 1,
                      colorStops: [
                        {
                          offset: 0,
                          color: newVal.color[index] + "4C", // 渐变起始颜色
                        },
                        {
                          offset: 1,
                          color: newVal.color[index] + "19", // 渐变结束颜色
                        },
                      ],
                    },
                  },
                  tooltip: {
                    valueFormatter: (value) => {
                      return value + "";
                    },
                  },
                  data: this.lineData[item].map((item, index) => {
                    return item.VALUE || item.NUM ? item.VALUE || item.NUM : 0;
                  }),
                });
              }
            });
          } else {
            this.xAxis = [
              {
                type: "category",
                data: this.table.datas.map((item, index) => {
                  return item.NAME;
                }),
                axisLabel: {
                  rotate: 45, // 设置 x 轴名称逆时针旋转角度
                },
                axisPointer: {
                  type: "shadow",
                },
              },
            ];
            this.yAxis.push({
              type: "value",
              min: 0,
              // interval: 5,
              axisLabel: {
                formatter: "{value}",
              },
            });
          }
          setTimeout(() => {
            this.init();
          });
        }
      },
    },
  },
  methods: {
    init() {
      let option = {
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "cross",
            crossStyle: {
              color: "#999",
            },
          },
          formatter: (params) => {
            // 如果是单一的柱状图就从空开始加等于
            let result =
              params[0].name + (this.type == "new_bar" ? "" : ":<br>");
            for (let i = 0; i < params.length; i++) {
              let seriesName = params[i].seriesName; // 获取系列名称
              let value = params[i].value; // 获取当前数据的value
              // 根据系列名称进行判断,执行不同的逻辑
              result += seriesName + ": " + (value ? value : 0) + "<br>";
            }
            return result;
          },
        },
        grid: {
          top: "30",
          left: "40", // 调整y轴距离左侧的距离
          bottom: "25%",
        },
        toolbox: {
          feature: {
            // dataView: { show: true, readOnly: false },
            // magicType: { show: true, type: ["line", "bar"] },
            // restore: { show: true },
            // saveAsImage: { show: true },
          },
        },
        legend: {
          data: this.legendData,
        },
        xAxis: this.xAxis,
        yAxis: this.yAxis,
        series: [
          {
            name: this.lineData ? this.lineData[this.legendData[0]][0].COL : "",
            type: "bar",
            color: this.table.color[0],
            label: {
              show: false, // 显示标签
              position: "top", // 标签位置
              formatter: "{c}", // 标签内容格式化
              color: "black", // 标签颜色
            },
            tooltip: {
              valueFormatter: (value) => {
                return value + "";
              },
            },
            itemStyle: {
              borderRadius: [10, 10, 0, 0],
              // color: this.table.color[0],
            },
            data: this.table.datas.map((item, index) => {
              return item.VALUE || item.NUM ? item.VALUE || item.NUM : 0;
            }),
          },
          ...this.series,
          // {
          //   name: "护士",
          //   type: "line",
          //   smooth: true, //线变得有弧度
          //   symbol: "none", //隐藏小圆点
          //   color: this.table.color[1],
          //   areaStyle: {
          //     //折线图下边阴影
          //     color: {
          //       type: "linear",
          //       x: 0,
          //       y: 0,
          //       x2: 0,
          //       y2: 1,
          //       colorStops: [
          //         {
          //           offset: 0,
          //           color: this.table.color[1] + "4C", // 渐变起始颜色
          //         },
          //         {
          //           offset: 1,
          //           color: this.table.color[1] + "19", // 渐变结束颜色
          //         },
          //       ],
          //     },
          //   },
          //   tooltip: {
          //     valueFormatter: function (value) {
          //       return value + "";
          //     },
          //   },
          //   data: [
          //     2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0,
          //     2.3,
          //   ],
          // },
          // {
          //   name: "患者",
          //   type: "line",
          //   smooth: true, //线变得有弧度
          //   symbol: "none", //隐藏小圆点
          //   color: this.table.color[2],
          //   areaStyle: {
          //     //折线图下边阴影
          //     color: {
          //       type: "linear",
          //       x: 0,
          //       y: 0,
          //       x2: 0,
          //       y2: 1,
          //       colorStops: [
          //         {
          //           offset: 0,
          //           color: this.table.color[2] + "4C", // 渐变起始颜色
          //         },
          //         {
          //           offset: 1,
          //           color: this.table.color[2] + "19", // 渐变结束颜色
          //         },
          //       ],
          //     },
          //   },
          //   tooltip: {
          //     valueFormatter: function (value) {
          //       return value + " °C";
          //     },
          //   },
          //   data: [
          //     2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2,
          //   ],
          // },
        ],
      };
      let chartDom =
        this.$refs[this.type == "new_bar" ? "barChart" : "barChart2"];
      let myChart = this.$E.init(chartDom);
      myChart.setOption(option);
      myChart.on("click", function (params) {
        console.log(params.seriesIndex);
        if (params.componentType === "series") {
          var dataIndex = params.dataIndex; // 获取点击的数据索引
          var data = option.series[params.seriesIndex].data[dataIndex]; // 获取点击的数据对象
          console.log(data);
        }
      });
    },
  },
};
</script>
<style scoped lang="scss">
.wrapper {
  width: 100%;
  height: 100%;
  position: relative;
  #barChart,
  #barChart2 {
    width: 100%;
    height: 100%;
  }
}
</style>

调用:

<NewBarChart
  :table="table"
  :style="{ height: heightNew }"
  :type="style[0]"
/>
// heightNew : 动态计算的高度
// new_bar : new_bar / new_barLine
// table:
/**
 * {
  "color": [
    "#5470c6",
    "#91cc75",
    "#fac858",
    "#ee6666",
    "#73c0de",
    "#3ba272",
    "#fc8452",
    "#9a60b4",
    "#ea7ccc",
    "#8364FF",
    "#36F4D7",
    "#FBB03C"
  ],
  "datas": [
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "47病区(骨科)",
      "VALUE": 24
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "59病区(全科医学科)",
      "VALUE": 11
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "45病区(神外、眼科)",
      "VALUE": 30
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "40病区(泌尿外、肾内科)",
      "VALUE": 26
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "38病区(普外科)",
      "VALUE": 29
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "46病区(心胸外、介入科)",
      "VALUE": 28
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "52病区(康复科)",
      "VALUE": 29
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "31病区(产科)",
      "VALUE": 49
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "37病区(骨科)",
      "VALUE": 24
    },
    {
      "COL": "护士",
      "PXXH": 2,
      "NAME": "35病区(妇科、眼科)",
      "VALUE": 22
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "47病区(骨科)",
      "VALUE": 42
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "59病区(全科医学科)",
      "VALUE": 26
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "45病区(神外、眼科)",
      "VALUE": 50
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "40病区(泌尿外、肾内科)",
      "VALUE": 50
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "46病区(心胸外、介入科)",
      "VALUE": 50
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "38病区(普外科)",
      "VALUE": 50
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "52病区(康复科)",
      "VALUE": 44
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "31病区(产科)",
      "VALUE": 40
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "37病区(骨科)",
      "VALUE": 42
    },
    {
      "COL": "床位",
      "PXXH": 1,
      "NAME": "35病区(妇科、眼科)",
      "VALUE": 50
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "47病区(骨科)",
      "VALUE": 72
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "59病区(全科医学科)",
      "VALUE": 28
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "45病区(神外、眼科)",
      "VALUE": 51
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "40病区(泌尿外、肾内科)",
      "VALUE": 120
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "46病区(心胸外、介入科)",
      "VALUE": 69
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "38病区(普外科)",
      "VALUE": 91
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "52病区(康复科)",
      "VALUE": 48
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "31病区(产科)",
      "VALUE": 148
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "37病区(骨科)",
      "VALUE": 73
    },
    {
      "COL": "患者",
      "PXXH": 3,
      "NAME": "35病区(妇科、眼科)",
      "VALUE": 147
    }
  ]
}
 */

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最新八股文前端面试题

第一章 Css 1.说一下CSS的盒模型。 在HTML页面中的所有元素都可以看成是一个盒子盒子的组成:内容content、内边距padding、边框border、外边距margin盒模型的类型: 标准盒模型 margin border padding content IE盒模型 margin content(border padding) 控制盒模型的模式…

如何选择靠谱的软件测试外包公司?CMA、CNAS软件测试报告获取

作为信息科技产业的代表之一&#xff0c;软件公司受到了越来越多的关注&#xff0c;它们的发展为我国的科技创新提供了强大的战略支撑。软件测试作为提升软件产品质量的后盾&#xff0c;日益成为一个专业化、标准化和规范化的行业&#xff0c;软件测试外包公司就是这种背景下成…

每日汇评:由于非农就业数据可能低迷,黄金恐再次测试2050美元上方

周五早间&#xff0c;金价在2,030美元附近扩大区间&#xff1b; 美元正在企稳&#xff0c;美债收益率坚持复苏收益&#xff1b; 由于美国就业大概率疲软&#xff0c;黄金日线图倾向于看涨&#xff1b; 周五早间&#xff0c;金价连续第四个交易日延续区间波动走势&#xff0c;因…

员工持股平台模式有哪几种?

员工持股平台模式 目前在现有的市场环境下持股平台的模式主要有公司型的持股平台以及有限合伙企业的持股平台。 &#xff08;一&#xff09;公司型员工持股平台 设立公司型的员工持股平台的唯一目的是为了让平台公司受让母公司的股权&#xff0c;从而实现员工间接持有母公司股权…

外贸行业的CRM系统和其它CRM有什么区别?

外贸行业对客户管理的追求日益提高&#xff0c;为了应对客户需求的变化和多元性&#xff0c;外贸企业需要借助CRM管理系统实现智能管理。下面&#xff0c;我们将详细探讨外贸CRM的概念、特点和具体应用。 什么是外贸CRM&#xff1f; 外贸CRM是指针对外贸行业的客户关系管理系…

3-Mybatis

文章目录 Mybatis概述什么是Mybatis&#xff1f;Mybatis导入知识补充数据持久化持久层 第一个Mybatis程序&#xff1a;数据的增删改查查创建环境编写代码1、目录结构2、核心配置文件&#xff1a;resources/mybatis-config.xml3、mybatis工具类&#xff1a;Utils/MybatisUtils4、…

电商行业邮件营销全攻略:解决方案与实施技巧

在电商行业这样多元化且快节奏的行业中&#xff0c;有效、及时的沟通则是其业务发展的基础之一。您需要在客户生命周期的各个阶段与他们进行交互&#xff0c;需要在恰当的时机推送他们需要的信息&#xff0c;更重要的是&#xff0c;您需要根据客户的购买经历迅速制定营销方案&a…

STL(五)(queue篇)

我发现之前一版在电脑上看 常用函数部分 没有问题,由于是手打上去的,在手机上看会发生错位问题,现已将电脑原版 常用函数部分 截图改为图片形式,不会再发生错位问题,非常感谢大家的支持 ### priority_queue优先队列出现频率非常高,尤为重要(是一定要掌握的数据结构) 1.queue队…

vmware虚拟机17 安装macos14过程及问题处理亲测

前期准备 1、可引导可虚拟机安装的macOS Sonoma 14 ISO镜像安装文件 我找到得地址&#xff0c;下载自行解决啦 2、VMware虚拟机应用软件 官网下载就好&#xff0c;搜个码搞定 3、解锁工具macOS Unlocker 开始安装&#xff1a; 1、打开VMware软件&#xff0c;新建一个系统…

[MySQL] MySQL复合查询(多表查询、子查询)

前面我们学习了MySQL简单的单表查询。但是我们发现&#xff0c;在很多情况下单表查询并不能很好的满足我们的查询需求。本篇文章会重点讲解MySQL中的多表查询、子查询和一些复杂查询。希望本篇文章会对你有所帮助。 文章目录 一、基本查询回顾 二、多表查询 2、1 笛卡尔积 2、2…

【Vulnhub 靶场】【Funbox: GaoKao】【简单】【20210606】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/funbox-gaokao,707/ 靶场下载&#xff1a;https://download.vulnhub.com/funbox/FunboxGaoKao.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年06月06日 文件大小&#xff1a;1.3 GB 靶场作者&#…

虚拟化之指令的Trap和仿真

有时,虚拟机监控程序需要在虚拟机(VM)中模拟操作。例如,VM内的软件可能尝试配置与功耗管理或缓存一致性相关的低级处理器控件。通常,您不希望将VM直接访问这些控件,因为它们可能被用于突破隔离,或影响系统中的其他VM。 trap在执行给定操作(例如读取寄存器)时引发异常…

Python零基础入门之详解sort排序使用

文章目录 1.前言2.环境准备3.程序实现4.sort拓展关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 1.前言 昨天一…

IBL环境贴图原理及着色器实现【基于图像的照明】

IBL - Image Based Lighting - 也就是基于图像的照明&#xff0c;是一组照亮物体的技术&#xff0c;不是像上一章那样通过直接分析光&#xff0c;而是将周围环境视为一个大光源。 这通常是通过操作立方体贴图环境贴图&#xff08;取自现实世界或从 3D 场景生成&#xff09;来完…

vuepress-----13、分割config

13、分割config config.js const headConfig require(./config/headConfig); const pluginsConfig require(./config/pluginsConfig); const themeConfig require(./config/themeConfig)module.exports {title: "小邵子",description: 小邵子的个人笔记,head: he…

openEuler JDK21 部署 Zookeeper 集群

zookeeper-jdk21 操作系统&#xff1a;openEuler JDK&#xff1a;21 主机名IP地址spark01192.168.171.101spark02192.168.171.102spark03192.168.171.103 安装 1. 升级内核和软件 yum -y update2. 安装常用软件 yum -y install gcc gcc-c autoconf automake cmake make \zl…

tomcat篇---第一篇

系列文章目录 文章目录 系列文章目录前言一、Tomcat的缺省端口是多少,怎么修改?二、tomcat 有哪几种Connector 运行模式(优化)?三、Tomcat有几种部署方式?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文…

04数据平台Flume

Flume 功能 Flume主要作用&#xff0c;就是实时读取服务器本地磁盘数据&#xff0c;将数据写入到 HDFS。 Flume是 Cloudera提供的高可用&#xff0c;高可靠性&#xff0c;分布式的海量日志采集、聚合和传输的系统工具。 Flume 架构 Flume组成架构如下图所示&#xff1a; A…

重要功能:妙手ERP正式接入北俄海外仓,助力跨境卖家出海俄罗斯市场!

近日&#xff0c;妙手ERP正式接入北俄海外仓&#xff0c;并支持Ozon、速卖通AliExpress、Joom平台卖家同步推送商品、查看库存清单、高效处理订单&#xff0c;助力卖家掘金俄罗斯市场。 关于北俄海外仓 北俄海外仓为北俄国际旗下项目&#xff0c;北俄国际成立于2008年&#xf…

【Java用法】Lombok中@SneakyThrows注解的使用方法和作用

Lombok中SneakyThrows注解的使用方法和作用 一、SneakyThrows的作用二、SneakyThrows注解原理 一、SneakyThrows的作用 普通Exception类,也就是我们常说的受检异常或者Checked Exception会强制要求抛出它的方法声明throws&#xff0c;调用者必须显示的去处理这个异常。设计的目…