Echarts使用感受

news2024/11/16 16:38:08

目录

数据处理

遇到的问题

更换echart主题

Y轴数字后添加百分比号

eCharts饼图显示百分比

echarts自定义主题的手把手教学

查看UI图

点击下方链接页面的定制主题按钮

点击下载主题

点击主题下载的JSON版本,点击复制

​编辑 新建js文件,把复制的内容放进去,注意要使用export default 复制的JSON内容

在相关页面的script标签里引入使用

在mounted里设置该主题,可以自定义主题名

 在echart图表挂载时通过参数注入

 最终效果:

其他有意思的文章推荐


数据处理

有时候接口返回来的一堆数据有很多不同的图表和表格使用,这时候就不得不一直重组数据格式,有时候拼来拼去,花费很长时间

比如

     <div class="flex-content">
        <h4>四大风险隐患统计</h4>
        <div v-show="chart1AndChart2Data" class="chart1" id="chart1"></div>
        <div v-show="!chart1AndChart2Data" class="chart1">
          <p class="empty-text">暂无数据</p>
        </div>
        <el-table
          v-if="chart1AndChart2Data"
          :data="tableData"
          stripe
          style="width: 97%"
        >
          <el-table-column prop="name" label="" width="180"> </el-table-column>
          <el-table-column
            v-for="(item, index) in Object.keys(chart1AndChart2Data)"
            :key="index"
            :prop="item"
            :label="item"
            align="center"
          >
          </el-table-column>
        </el-table>
      </div>
      <div class="flex-content">
        <h4>四大风险隐患占比</h4>
        <div
          v-show="chart1AndChart2Data"
          class="common-style"
          id="chart2"
        ></div>
        <div v-show="!chart1AndChart2Data" class="common-style">
          <p class="empty-text">暂无数据</p>
        </div>
      </div>

 

 //堆叠条形图
    enableChart1() {
      const entriesInfo = Object.entries(this.chart1AndChart2Data);
      const outKey = Object.keys(this.chart1AndChart2Data);
      const outPutValue = Object.values(this.chart1AndChart2Data);
      const key = Object.keys(outPutValue[0]);

      let disposeOverObject = {};
      outPutValue.forEach(e => {
        key.forEach(i => {
          disposeOverObject[i]
            ? disposeOverObject[i].push(e[i])
            : (disposeOverObject[i] = [e[i]]);
        });
      });
      let tableList = [];

      // 启用表格----重组数据格式
      key.forEach((e, index) => {
        tableList[index]
          ? (tableList[index].name = e)
          : (tableList[index] = { name: e });
        entriesInfo.forEach(i => {
          tableList[index][i[0]] = i[1][e];
        });
      });
      this.tableData = JSON.parse(JSON.stringify(tableList));
      var chartDom = document.getElementById("chart1");
      var myChart = echarts.init(chartDom, "shine");
      var option;

      option = {
        tooltip: {
          trigger: "axis",
          axisPointer: {
            // Use axis to trigger tooltip
            type: "shadow" // 'shadow' as default; can also be 'line' or 'shadow'
          }
        },
        legend: {},
        grid: {
          left: "3%",
          right: "4%",
          bottom: "3%",
          containLabel: true
        },
        xAxis: {
          type: "value"
        },
        yAxis: {
          type: "category",
          data: Object.keys(this.chart1AndChart2Data)
        },
        series: Object.entries(disposeOverObject)
          .map(e => {
            if (e[0] != "汇总") {
              return {
                name: e[0],
                type: "bar",
                stack: "total",
                label: {
                  show: true
                },
                emphasis: {
                  focus: "series"
                },
                data: e[1].map(i => {
                  if (i) return i;
                })
              };
            }
          })
          .filter(n => {
            if (n) {
              return n;
            }
          })
      };

      option && myChart.setOption(option);
      myChart.resize();
    },

    //柱状图标签旋转
    enableChart2() {
      const entriesInfo = Object.entries(this.chart1AndChart2Data);
      const outKey = Object.keys(this.chart1AndChart2Data);
      const outPutValue = Object.values(this.chart1AndChart2Data);
      const key = Object.keys(outPutValue[0]);
      let disposeOverObject = {};
      outPutValue.forEach(e => {
        key.forEach(i => {
          disposeOverObject[i]
            ? disposeOverObject[i].push(e[i])
            : (disposeOverObject[i] = [e[i]]);
        });
      });

      // 获取汇总数据
     const allNumList= Object.entries(disposeOverObject).map(e => {
        if(e[0] == "汇总")return e[1];
      }).filter(n => {
            if (n) {
              return n;
            }
          })[0];
      var app = {};

      var chartDom = document.getElementById("chart2");
      var myChart = echarts.init(chartDom, "shine");
      var option;

      const posList = [
        "left",
        "right",
        "top",
        "bottom",
        "inside",
        "insideTop",
        "insideLeft",
        "insideRight",
        "insideBottom",
        "insideTopLeft",
        "insideTopRight",
        "insideBottomLeft",
        "insideBottomRight"
      ];
      app.configParameters = {
        rotate: {
          min: -90,
          max: 90
        },
        align: {
          options: {
            left: "left",
            center: "center",
            right: "right"
          }
        },
        verticalAlign: {
          options: {
            top: "top",
            middle: "middle",
            bottom: "bottom"
          }
        },
        position: {
          options: posList.reduce(function(map, pos) {
            map[pos] = pos;
            return map;
          }, {})
        },
        distance: {
          min: 0,
          max: 100
        }
      };
      app.config = {
        rotate: 90,
        align: "left",
        verticalAlign: "middle",
        position: "insideBottom",
        distance: 15,
        onChange: function() {
          const labelOption = {
            rotate: app.config.rotate,
            align: app.config.align,
            verticalAlign: app.config.verticalAlign,
            position: app.config.position,
            distance: app.config.distance
          };
          myChart.setOption({
            series: [
              {
                label: labelOption
              },
              {
                label: labelOption
              },
              {
                label: labelOption
              },
              {
                label: labelOption
              }
            ]
          });
        }
      };
      const labelOption = {
        show: false,
        position: app.config.position,
        distance: app.config.distance,
        align: app.config.align,
        verticalAlign: app.config.verticalAlign,
        rotate: app.config.rotate,
        formatter: "{c}  {name|{a}}",
        fontSize: 16,
        rich: {
          name: {}
        }
      };
      option = {
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "shadow"
          }
        },
        legend: {
          data: key
        },
        toolbox: {
          show: false,
          orient: "vertical",
          left: "right",
          top: "center",
          feature: {
            mark: { show: true },
            dataView: { show: true, readOnly: false },
            magicType: { show: true, type: ["line", "bar", "stack"] },
            restore: { show: true },
            saveAsImage: { show: true }
          }
        },
        xAxis: [
          {
            type: "category",
            axisTick: { show: false },
            data: outKey
          }
        ],
        yAxis: [
          {
            type: "value",
        axisLabel:{
            //函数模板
            formatter:function (value, index) {

                return value+'%';
            }}

          }
        ],
        series: Object.entries(disposeOverObject)
          .map(e => {
            if (e[0] != "汇总") {
              return {
                name: e[0],
                type: "bar",
                barGap: 0,
                label: labelOption,
                emphasis: {
                  focus: "series"
                },
                data: e[1].map((z,index)=>(z/allNumList[index]).toFixed(2)*100)
              };
            }
          })
          .filter(n => {
            if (n) {
              return n;
            }
          })
      };

      option && myChart.setOption(option);
    }

 3个图表共用一个一个接口,前端进行数据处理,绕来绕去。

遇到的问题

更换echart主题

echarts换主题颜色(在vue中使用)_51CTO博客_vue中使用echarts

如果需要自定义主题(主题下载 - Apache ECharts),建议去下载snipaste这个软件,可以吸色、截图、贴图等操作,方便我们结合UI图自定义主题

Y轴数字后添加百分比号

ECharts 使用yAxis.axisLabel.formatter自定义Y轴刻度标签--两种方法(字符串模板和函数模板)_echarts y轴刻度自定义-CSDN博客

eCharts饼图显示百分比

ECharts 使用yAxis.axisLabel.formatter自定义Y轴刻度标签--两种方法(字符串模板和函数模板)_echarts y轴刻度自定义-CSDN博客

echarts自定义主题的手把手教学

注意:接下来是我对echarts主题覆盖的手把手教学(vue)

查看UI图

点击下方链接页面的定制主题按钮

主题下载 - Apache ECharts

点击下载主题

点击主题下载的JSON版本,点击复制
 新建js文件,把复制的内容放进去,注意要使用export default 复制的JSON内容

在相关页面的script标签里引入使用

import resetTheme from './resetTheme.js'; 

在mounted里设置该主题,可以自定义主题名
  mounted() {
    echarts.registerTheme('guoshou', resetTheme)
  },
 在echart图表挂载时通过参数注入
  var chartDom = document.getElementById("chart1");
      var myChart = echarts.init(chartDom, 'guoshou');
      var option;
//...............
 最终效果:


感谢支持

其他有意思的文章推荐

大屏大概是怎么个开发法(前端)_JianZhen✓的博客-CSDN博客

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

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

相关文章

【Java】什么是API

API (Application Programming Interface,应用程序编程接口) Java中的API 指的就是 JDK 中提供的各种功能的 Java类&#xff0c;这些类将底层封装起来&#xff0c;我们不需要关心这些类是如何实现的&#xff0c;只需要学习这些类如何使用即可&#xff0c;我们可以通过帮助文档…

二、监控搭建-Prometheus-采集端部署

二、监控搭建-Prometheus-采集端部署 1、背景2、目标3、传承4、操作 1、背景 在上一篇中我们搭建了Prometheus平台&#xff0c;平台的搭建跟Linux系统上面安装了vim软件一样&#xff0c;给的只是一个很好的铸剑玄铁&#xff0c;具体的使用需要打磨和配件的运用。 2、目标 使…

XGBoost 2.0:对基于树的方法进行了重大更新

XGBoost是处理不同类型表格数据的最著名的算法&#xff0c;LightGBM 和Catboost也是为了修改他的缺陷而发布的。9月12日XGBoost发布了新的2.0版&#xff0c;本文除了介绍让XGBoost的完整历史以外&#xff0c;还将介绍新机制和更新。 这是一篇很长的文章&#xff0c;因为我们首…

转守为攻,亚马逊云换帅背后的战略转向

点击关注 文&#xff5c;刘雨琦 一则人事任命&#xff0c;揭开了亚马逊云在大中华区反击战的序幕。 10月9日&#xff0c;亚马逊云科技全球销售、市场和服务高级副总裁 Matt Garman 宣布了大中华区领导人变更任命&#xff0c;储瑞松将接替张文翊担任该职位&#xff0c;继续带领…

2023年网络安全岗位有哪些?金九银十别错过秋招!

网络安全有哪些岗位&#xff1f; 1. 安全服务工程师 7-10k 网络安全工程师、安全项目经理&#xff1a;主要负责甲方设备安全调试工作。需精通服务器、网络技术以及安全设备原理与配置。 2. 安全运维工程师 7-10k 安全运维工程师&#xff0c;主要对己方安全防御体系的运维和应急…

如何在 Spring Boot 中提高应用程序的安全性

如何在 Spring Boot 中提高应用程序的安全性 Spring Boot是一种流行的Java开发框架&#xff0c;用于构建Web应用程序和微服务。在构建应用程序时&#xff0c;安全性是至关重要的因素。不论您的应用程序是面向公众用户还是企业内部使用&#xff0c;都需要采取适当的措施来确保数…

(java)(python)以代理IP的方式进行请求数据

文章目录 前言(java)(python)以代理IP的方式进行请求数据1. python2. java 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话…

洛谷100题DAY7

31.P1636 Einstein学画画 此题为欧拉通路&#xff0c;必须要满足奇点的个数为0或2个 奇点&#xff1a;度数&#xff08;入度出度&#xff09;为奇数的点 如果奇点为2个或者0个就可以直接一笔化成 eg. 我们发现奇数点个数每增加2个就多一笔 #include<bits/stdc.h> us…

数据结构和算法(11):红黑树

概述 伸展树实现简便、无需修改节点结构、分摊复杂度低&#xff0c;但可惜最坏情况下的单次操作需要O(n)时间。 AVL树尽管可以保证最坏情况下的单次操作速度&#xff0c;但需在节点中嵌入平衡因子等标识&#xff1b;更重要的是&#xff0c;删除操作之后的重平衡可能需做多达O(…

【DRAM存储器十三】DDR介绍-功能框图和模式寄存器解析

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考资料&#xff1a;《镁光DDR数据手册》 目录 DDR SDRAM芯片引脚 DDR SDRAM芯片框…

校园跑腿小程序还受欢迎不?

校园跑腿小程序是如今大学生群体中越来越受欢迎的一种服务模式。它为大学生提供了一个便捷的平台&#xff0c;使他们能够在校园内完成各类生活事务&#xff0c;如购买食品、快递取送、打印复印等。这种形式的服务在过去几年里在全球范围内迅速发展&#xff0c;并取得了巨大的成…

大学专业分类及介绍 专业有哪些

大学的专业非常多样化&#xff0c;涵盖了哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、医学、管理学、艺术学等12个学科门类。每个学科门类下又设有多个具体专业。 哲学类下设专业有4个&#xff0c;包括哲学、逻辑学、宗教学、伦理学。 经济学类下设专业有17…

外汇天眼:CONSOB下令封禁5个非法金融服务网站 总数达945个!

负责监管意大利金融市场的监管机构意大利公司和交易委员会The Commissione Nazionale per le Societ e la Borsa &#xff08;CONSOB&#xff09;10月6日发布禁令&#xff0c;命令意大利互联网服务提供商&#xff08;ISP&#xff09;关闭5个在意大利境内提供非法金融服务的网站…

【Codeforces】Educational Codeforces Round 156 [Rated for Div. 2]

hh第一次记录cf。 复盘 ab题目比较清晰&#xff0c;只开了这两题&#xff0c;后面看了下cd&#xff0c;即使开了翻译也看不懂题目是什么意思&#xff0c;最后放弃睡觉了。。 a是一道思维题&#xff0c;翻了下别人写的发现大家写的各不相同hh b是一道数学题&#xff0c;过程有点…

改element的单选框的样式,改成方形有勾的样式

element-ui单选框按钮的样式改成对钩_el-radio 变对钩样式-CSDN博客 改变选中后字体的颜色 // 改变选中后字体的颜色 ::v-deep .el-radio__input.is-checked .el-radio__label {color:#28d4c1!important; }

2.1 线程是什么

技术上来说&#xff0c;线程是操作系统能够操作运行的一组独立的指令运算流程&#xff1b;更具体地来说&#xff0c;它的意义如下。 对于开发者&#xff0c;独立于主程序运行的一个“程序”可以称为一个线程。更进一步来说&#xff0c;如果一个应用包含多个“程序”&#xff0c…

计算顺序表中值在100到500之间的元素个数

要求顺序表中值在100到500之间的元素的个数&#xff0c;你可以使用C语言编写一个循环来遍历顺序表中的元素&#xff0c;并在循环中检查每个元素是否在指定的范围内。 #include <stdio.h>#define MAX_SIZE 100 // 假设顺序表的最大容量为100int main() {int arr[MAX_SIZE]…

车载开发所学内容,有哪些?程序员的转岗位需求

一、高速发展的行业前景 随着全球智能汽车市场的飞速发展&#xff0c;车载开发行业的前景可谓一片光明。各国政府对于自动驾驶和智能交通系统的政策支持&#xff0c;为行业带来了前所未有的机遇。此外&#xff0c;人工智能、大数据、云计算等前沿技术的不断突破&#xff0c;为…

C#,数值计算——数据建模Fitlin的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// General linear fit /// </summary> public class Fitlin { private int ndat { get; set; } private int ma { get; set; } private do…

项目管理必备的22个公式

大家好&#xff0c;我是老原。 趁着国庆时间比较空闲&#xff0c;给你们整理了一些项目管理必备的计算公式&#xff0c;一共22个。 每一个公式都给你们标注了适用情况和使用方法&#xff0c;为了方便你们理解&#xff0c;也加了一些例子&#xff0c;保准你看了就会。 觉得不…