在vue项目使用数据可视化 echarts ,柱状图、折线图、饼状图使用示例详解及属性详解

news2024/12/24 2:31:31

官网地址:Apache ECharts

​一、下载插件并在页面中引入

  npm install echarts --save

页面导入:

  import * as echarts from 'echarts'

全局导入: main.js 中,导入并注册到全局

  import echarts from 'echarts'
  Vue.prototype.$echarts = echarts

二、实现效果展示

三、绘制柱状图使用步骤

 代码示例

<template>
  <div class="chart">
    <div
      id="chart_one"
      style="
        height: 82%;
        padding: 10px;
        display: flex;
        align-items: center;
        justify-content: center;
      "
    ></div>
    <h2>近一周使用记录</h2>
  </div>
</template>


<script>
  import * as echarts from 'echarts'
  export default {
    mounted() {
      // 解决echarts图表放大溢出父容器
      // 页面上的元素进行监测和调整大小操作,当被监测的元素的大小发生变化时调用
      setTimeout(() => {
        const resizeOb = new ResizeObserver((entries) => {
          for (const entry of entries) {
            echarts.getInstanceByDom(entry.target).resize()
          }
        })
        resizeOb.observe(document.getElementById('chart_one')) 
      })
      // 通过id获取echarts元素初始化图表的容器:创建一个 echarts 实例,调用 methods 里的 initChart 进行图表初始化
      // 获取id为chart_one的dom元素给chartDom容器,init初始化一个echarts实例给myChart,需以dom元素为参数
      this.$nextTick(() => {
        this.chartDom = document.getElementById('chart_one')
        this.myChart = echarts.init(this.chartDom)
        this.initChart() 
      })
      // 接口获取数据后,再为echarts赋值
      this.initData()
      setTimeout(() => {
        this.initChart() 
      }, 2000)
    },
    methods: {
      initChart() {
        // 在 ECharts 的 X 轴上显示当前日期前一周的月日
        const today = new Date()
        const lastWeek = new Date(
          today.getFullYear(),
          today.getMonth(),
          today.getDate() - 6
        ) // 最近一周的日期
        const xAxisData = [] // 存储要显示的日期字符串
        for (let i = lastWeek.getTime(); i <= today.getTime(); i += 86400000) {
          const date = new Date(i)
          xAxisData.push(
            date.toLocaleDateString('en-US', {
              month: 'numeric',
              day: 'numeric',
            })
          )
        }
        this.option = {
          // 设置图表的边距,containLabel表示图表内容应包含在边距之内
          grid: {
            left: '3%',
            right: '4%',
            bottom: '4%',
            top: '11%',
            containLabel: true,
          },
          // 设置一个图表的 x 轴属性
          xAxis: {
            type: 'category',
            data: xAxisData, // x 轴上的数据
            axisLabel: {
              formatter: '{value}', // 显示格式
            },
          },
          yAxis: {
            type: 'value',
            axisLabel: {
              formatter: '{value} m³',
            },
          },
          // 提示框的内容和样式,
          tooltip: {
            trigger: 'axis', // 触发方式
            formatter: '用气日期:{b}<br />日用气量:{c}', // 自定义数据
            backgroundColor: 'rgba(255, 255, 255, 0.8)',
            axisPointer: {
              type: 'shadow',
            },
          },
          // 图表的配置
          series: [
            {
              // data: this.chartonedate, // 显示数据
              data: [120, 200, 150, 80, 70, 110, 130],
              type: 'bar', // 图表类型,柱状
              showBackground: true, // 是否显示柱状图背景色
              backgroundStyle: {
                color: 'rgba(180, 180, 180, 0.2)',
              },
              label: {
                // 标签的样式
                normal: {
                  show: true,
                  position: 'top',
                },
              },
            },
          ],
        }
        // 根据 this.option 的值来设置 this.myChart 的选项
        this.option && this.myChart.setOption(this.option)
      }, 
    },
  }
</script>

// 根据需要添加类名修改样式
<style lang="scss" scoped>
  .chart {
    width: 95%;
    height: 92%;
    background: linear-gradient(to bottom, #ffffff, #ffffff);
    h2 {
      text-align: center;
      margin: 0;
      font-size: 18px;
      color: #000;
    }
  }
</style>

四、绘制折线图、饼图代码整合

<template>
  <el-row :gutter="6"> 
    <el-col :span="9">
      <div class="ul-one ul-two">
        <div class="chart">
          <div
            id="chart_two"
            style="
              height: 82%;
              padding: 10px;
              display: flex;
              align-items: center;
              justify-content: center;
            "
          ></div>
          <h2>充值记录</h2>
        </div>
      </div>
    </el-col>
    <el-col :span="6">
      <div class="ul-one ul-two">
        <div class="chart">
          <div
            id="chart_three"
            style="
              height: 82%;
              padding: 10px;
              display: flex;
              align-items: center;
              justify-content: center;
            "
          ></div>
          <h2>用户数据分布</h2>
        </div>
      </div>
    </el-col>
  </el-row>
</template>

<script>
  import * as echarts from 'echarts'
  export default {
    mounted() { 
      setTimeout(() => {
        const resizeOb = new ResizeObserver((entries) => {
          for (const entry of entries) {
            echarts.getInstanceByDom(entry.target).resize()
          }
        }) 
        resizeOb.observe(document.getElementById('chart_two'))
        resizeOb.observe(document.getElementById('chart_three'))
      }) 
      this.$nextTick(() => {
        this.chartDom = document.getElementById('chart_one')
        this.myChart = echarts.init(this.chartDom)
        this.initChart()
        this.chartDomtwo = document.getElementById('chart_two')
        this.myCharttwo = echarts.init(this.chartDomtwo)
        this.initCharttwo()
        this.chartDomthree = document.getElementById('chart_three')
        this.myChartthree = echarts.init(this.chartDomthree)
        this.initChartthree()
      }) 
      this.initData()
      setTimeout(() => { 
        this.initCharttwo()
        this.initChartthree()
      }, 2000)
    },
    methods: { 
      initCharttwo() {
        this.optiontwo = {
          grid: {
            left: '3%',
            right: '4%',
            bottom: '4%',
            top: '11%',
            containLabel: true,
          },
          xAxis: {
            type: 'category',
            data: [
              '周期七',
              '周期六',
              '周期五',
              '周期四',
              '周期三',
              '周期二',
              '周期一',
            ],
          },
          yAxis: {
            type: 'value',
            axisLabel: {
              formatter: '{value} m³',
            },
          },
          tooltip: {
            trigger: 'axis',
            formatter: '用气周期:{b}<br />周期用量:{c}', // 自定义数据
            backgroundColor: 'rgba(255, 255, 255, 0.8)',
            axisPointer: {
              type: 'shadow',
            },
          },
          series: [
            {
              // data: this.charttwodate,
              data: [120, 200, 150, 80, 70, 110, 130],
              type: 'line',
              // 图表上显示数据,并放置在数据点的上方。
              label: {
                normal: {
                  show: true,
                  position: 'top',
                },
              },
            },
          ],
        }
        this.optiontwo && this.myCharttwo.setOption(this.optiontwo)
      },
      initChartthree() {
        this.optionthree = {
          tooltip: {
            trigger: 'item',
          },
          legend: {
            orient: 'vertical',
            left: 'left',
          },
          // 控制顶部小图标的位置
          legend: {
            top: '0',
            left: 'center',
          },
          series: [
            {
              name: '用户数量',
              type: 'pie',
              radius: '50%',
              center: ['50%', '60%'],
              data: [
                { value: 83, name: '燃气表用户' },
                { value: 16, name: '流量计用户' },
                { value: 9, name: '未开户用户' },
              ],
              emphasis: {
                itemStyle: {
                  shadowBlur: 10,
                  shadowOffsetX: 0,
                  shadowColor: 'rgba(0, 0, 0, 0.5)',
                },
              },
            },
          ],
        }
        this.optionthree && this.myChartthree.setOption(this.optionthree)
      },
    },
  }
</script>

<style lang="scss" scoped>
  .ul-two {
    display: flex;
    justify-content: space-around;
    margin: 5px 3px;
    border: 1px solid #ccc;
    li {
      margin: 10px;
      list-style: none;
      width: 15%;
      height: 200px;
      .ranqibiao {
        border-radius: 50px;
        width: 100%;
        height: 100%;
        background: url('~@/assets/bg/bg1.png') no-repeat center center;
        box-shadow: 0 4px 9px 2px rgba(247, 189, 35, 0.91);
        background-size: cover;
        display: flex;
        justify-content: center;
      }
      .liuliangji {
        border-radius: 50px;
        width: 100%;
        height: 100%;
        background: url('~@/assets/bg/bg2.png') no-repeat center center;
        box-shadow: 0 4px 9px 2px rgba(62, 170, 255, 0.91);
        background-size: cover;
        display: flex;
        justify-content: center;
      }
      .weikahu {
        border-radius: 50px;
        width: 100%;
        height: 100%;
        background: url('~@/assets/bg/bg3.png') no-repeat center center;
        box-shadow: 0 4px 9px 2px rgba(80, 224, 254, 0.91);
        background-size: cover;
        display: flex;
        justify-content: center;
      }
      .image {
        border-radius: 10px;
        background: #ffffff;
        width: 45px;
        height: 45px;
        display: flex;
        align-items: center;
        justify-content: center;
        margin-top: 40px;
      }
      .text {
        color: #ffffff;
        font-weight: bolder;
        margin-top: 20px;
      }
      .number {
        color: #ffffff;
        font-size: 20px;
        font-weight: 800;
        margin-top: 30px;
      }
    }
  }
  .val {
    text-align: center;
    color: #000;
    h2 {
      margin: 10px 0 0 0;
    }
  }
  .ul-one {
    height: 320px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .chart {
    width: 95%;
    height: 92%;
    background: linear-gradient(to bottom, #ffffff, #ffffff);
    h2 {
      text-align: center;
      margin: 0;
      font-size: 18px;
      color: #000;
    }
  }
</style>

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

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

相关文章

【云存储】【腾讯云】【阿里云】【b2】【google drive】【one drive】【s3】【azure】对比

【1】google drive 【2】b2 price 【3】腾讯云对象存储 文档中心 > 对象存储 > 开发者指南 > 对象 > 存储类型 > 存储类型概述 文档中心 > 对象存储 > 购买指南 > 计费项 > 数据取回费用

【计算机组成原理】24王道考研笔记——第四章 指令系统

第四章 指令系统 一、指令系统 指令是指示计算机执行某种操作的命令&#xff0c;是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该 机的指令系统&#xff0c;也称为指令集。 指令格式&#xff1a; 1.1分类 按地址码数目分类&#xff1a; 按指令长度分类&…

AttentionFreeTransformer 源码解析(一):AFTFull、AFTSimple、AFTLocal

我觉得源码写的很好懂&#xff0c;我就不加注释了&#xff0c;直接上计算流程图。 AFTFull class AFTFull(nn.Module):def __init__(self, max_seqlen, dim, hidden_dim64):super().__init__()max_seqlen: the maximum number of timesteps (sequence length) to be fed indim…

echarts柱状图X轴增加table列表显示数据,多y轴

效果图 完整配置 data(){return{chart1:null,chartType1:1,data:{years:{date:[2015,2016,2017,2018,2019,2020,2021,2022,2023],business:[10,23,26,33,43,58,50,45,66],profit:[3,4,6,7,8,5,7,8,12],proportion:[12,8,15,20,12,16,13,15,9]},months:{date:[1月, 2月,3月, 4月…

在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

1.Cadence 17.2 配置CIS数据库报&#xff1a;ERROR(ORCIS-6245): Database Operation Failed 安装cadance17.2以上版本时&#xff0c;ERROR(ORCIS-6245): Database Operation Failed_收湾湾的博客-CSDN博客 原因是ODBC数据库没有配置&#xff0c;或者没有驱动&#xff0c; 驱…

侯捷 C++ part2 兼谈对象模型笔记——3 模板

3 模板 3.1 类模板/函数模板 补充&#xff1a;只有模板的尖括号中<>&#xff0c;关键字 typename 和 class 是一样的 3.2 成员模板 它即是模板的一部分&#xff0c;自己又是模板&#xff0c;则称为成员模板 其经常用于构造函数 ctor1 这是默认构造函数的实现&#…

阿里云服务器免费申请使用限制条件及云主机配置

阿里云服务器免费试用申请链接入口&#xff0c;阿里云个人用户和企业用户均可申请免费试用&#xff0c;最高可以免费使用3个小时&#xff0c;阿里云服务器网分享阿里云服务器免费试用申请入口链接及云服务器配置&#xff1a; 目录 阿里云服务器免费试用 企业用户免费服务器试…

解决Qt的列表加载大量数据卡顿的问题

问题概述 本人在使用QListView插入大量数据时&#xff0c;界面卡顿十分严重。数据量大概只有上千左右&#xff0c;但是每个Item的内容比较多。当数据不停地插入一段时间后&#xff0c;卡顿到鼠标的移动都有点困难。 解决思路 QListView是典型的MVC思想的产物。界面呈现出来的数…

CorelDRAW(CDR) 2023中文版64位下载新功能教程

CorelDRAW2023&#xff08;简称CDR2023&#xff09;是一款非常专业的图形设计工具&#xff0c;该产品推出了全新的2023版本&#xff0c;在功能和体验上更进一步&#xff0c;最新的填充和透明设备功能可以完全控制任何类型的纹理&#xff0c;适用于网络摄影、印刷项目、艺术、排…

G. Counting Graphs Codeforces Round 891 (Div. 3) 1857G

Problem - G - Codeforces 题目大意&#xff1a;给出一棵n个点的边权树&#xff0c;问有多少个边权最大不超过s的图的最小生成树是这棵树 2<n<2e5;1<w[i]<1e9 思路&#xff1a;对于最小生成树上的每一条边&#xff0c;如果我们在包含这条边的链上的两点之间加了…

SpringBoot 该如何预防 XSS 攻击

XSS 漏洞到底是什么&#xff0c;说实话我讲不太清楚。但是可以通过遇到的现象了解一下。在前端Form表单的输入框中&#xff0c;用户没有正常输入&#xff0c;而是输入了一段代码&#xff1a;</input><img src1 onerroralert1> 这个正常保存没有问题。问题出在了列表…

建设数字化工厂管理系统的必要性有哪些

随着科技的不断发展&#xff0c;数字化已经深入到各个行业和领域&#xff0c;其中包括制造业。数字化工厂管理系统作为一种先进的生产管理模式&#xff0c;能够提高生产效率&#xff0c;降低生产成本&#xff0c;提升企业的竞争力。下面&#xff0c;我们就来探讨一下建设数字化…

Mysql按小时进行分组统计数据

目录 前言 按1小时分组统计 按2小时分组统计 按X小时分组统计 前言 统计数据时这种是最常见的需求场景&#xff0c;今天写需求时发现按2小时进行分组统计也特别简单&#xff0c;特此记录下。 按1小时分组统计 sql&#xff1a; select hour(pass_time) …

自建hexo博客并将原有的文章发布其上

1、保存粘贴到memo9中的博客文章&#xff0c;并将txt转换成word文档 varPowerShellPath, CommandLine: string; // , ScriptPath begin//save to txtMemo9.Lines.SaveToFile(test.txt);memo10.Lines.SaveToFile(txt2word.ps1);//save as docxPowerShellPath : powershell.exe…

Simulink仿真模块 - Math Function

Math Function:执行数学函数 在仿真库中的位置为:Simulink / Math Operations HDL Coder / Math Operations 模型为: 双击模型打开参数设置界面,如图所示: 说明 Math Function 模块可执行许多常见的数学函数。 提示 要执行平方根计算,请使用Sqrt模块。 …

QGIS二次开发四:实现图层列表

在实际开发中我们通常会遇到同时显示多个图层&#xff0c;并且还要实时显示和隐藏各图层的需求&#xff0c;如同 ArcGIS 的图层列表那样&#xff0c;界面左侧显示图层列表&#xff0c;列出当前已加载的所有图层&#xff0c;同时每个图层前面有复选框可以控制图层的显示/隐藏&am…

虾皮运营每天需要做什么?如何处理后台数据?

#shopee#​有很多朋友想做电商&#xff0c;但是对电商运营比较朦胧&#xff0c;不知道电商运营每天到底该做些什么。今天咱们就来解析下&#xff0c;Shopee电商运营每天该做哪些事情一个合格的电商运营&#xff0c;每天都会做好以下几点&#xff1a; 一、查看数据&#xff1a; …

echarts自动轮播tooltip

1. 将自动轮播的工具函数封装到 utils/echart-tooltip-carousel.js /*** echarts自动轮播tooltip* param {Object} chart echart实例* param {Number} num 轮播数量* param {Number} time 轮播间隔时间*/ export function loopShowTooltip(chart, num20, time2000) {let count…

如何配置一个永久固定的公网TCP地址来SSH远程树莓派?

文章目录 如何配置一个永久固定的公网TCP地址来SSH远程树莓派&#xff1f;前置条件命令行使用举例&#xff1a;修改cpolar配置文件 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 …

IoT 物联网安全事件的持续检测和监控解决方案

对于IoT物联网安全事件的持续检测和监控&#xff0c;可以采用以下解决方案&#xff1a; 设备管理和漏洞修复&#xff1a;确保设备的固件和软件及时更新&#xff0c;并修补已知的漏洞。建立一个设备清单&#xff0c;并定期审查和更新其中的设备。 流量分析和异常检测&#xff1a…