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

官网地址: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>

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

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

相关文章

Flume原理剖析

一、介绍 Flume是一个高可用、高可靠&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方&#xff0c;用于收集数据&#xff1b;同时&#xff0c;Flume提供对数据进行简单处理&#xff0c;并写到各种数据接受方&#xff08;可定制&…

日常开发中Git命令指北

Git基本操作 创建化仓库 mkdir 目录 cd 目录 git init配置本地仓库 # 配置用户名&#xff0c;邮箱 git config user.name "cxf" git config user.email "1969612859qq.com" # 查看本地配置&#xff08;小写的 L&#xff09; git config -l # 重置配置&a…

【SpringCloud】RabbitMQ基础

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…

【locust】使用locust + boomer实现对接口的压测

目录 背景 环境安装 脚本编写 master slave节点&#xff08;golang/boomer&#xff09; 问题 资料获取方法 背景 很早之前&#xff0c;考虑单机执行能力&#xff0c;使用locust做过公司短信网关的压测工作&#xff0c;后来发现了一个golang版本的locust&#xff0c;性能…

将程序添加到右键菜单快速启动

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 效果如下 以 Windows Terminal 为例 打开注册表编辑器&#xff1a;按下 Win R 键&#xff0c;输入 regedit&#xff0c;然后按回车键打开注册表编辑器。 在注册表编辑器中导航到以下路径&#xff1a; HKE…

LabVIEW对并行机器人结构进行建模仿真

LabVIEW对并行机器人结构进行建模仿真 为了对复杂机器人结构的数学模型进行建模、搜索、动画和验证&#xff0c;在工业机器人动态行为实验室中&#xff0c;设计并实现了具有五个自由度的单臂型机器人。在研究台上可以区分以下元素&#xff1a;带有直流电机和编码器的机器人;稳…

新的里程碑!纪念正月十六工作室博客总访问量突破两百万

时值盛夏&#xff0c;清风徐徐&#xff0c;不觉间我们的博客访问量又迈入了新的里程碑——访问量突破两百万&#xff01; 总访问量突破百万&#xff1a; 个人成就&#xff1a; 记得上次突破重大里程碑还是去年夏天&#xff0c;那时我们重修岳阳楼&#xff0c;追往忆&#…

【2.1】Java微服务:详解Hystrix

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; Java微服务 ✨特色专栏&#xff1a; 知识分享 &am…

考研408 | 【计算机网络】 数据链路层

导图&#xff1a; 数据链路层概念&#xff1a; 结点&#xff1a;主机、路由器 链路&#xff1a;网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。 数据链路&#xff1a;网络中两个结点之间的逻辑通道&#xff0…

【Archaius技术专题】「Netflix原生态」动态化配置服务之微服务配置组件变色龙

前提介绍 如果要设计开发一套微服务基础架构&#xff0c;参数化配置是一个非常重要的点&#xff0c;而Netflix也开源了一个叫变色龙Archaius的配置中心客户端&#xff0c;而且Archaius可以说是比其他客户端具备更多生产级特性&#xff0c;也更灵活。*在NetflixOSS微服务技术栈…

uni-app使用vue语法进行开发注意事项

目录 uni-app 项目目录结构 生命周期 路由 路由跳转 页面栈 条件编译 文本渲染 样式渲染 条件渲染 遍历渲染 事件处理 事件修饰符 uni-app 项目目录结构 组件/标签 使用&#xff08;类似&#xff09;小程序 语法/结构 使用vue 具体项目目录如下&#xff1a; 生命…

intelJ IDEA\PHPStorm \WebStorm\PyCharm 通过ssh连接远程Mysql\Postgresql等数据库

最容易出错的地方是在general面板下的host&#xff0c;不应该填真实的host地址&#xff0c;而应该填localhost或者127.0.0.1 具体操作步骤见下图

opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

矩特征&#xff08;Moments Features&#xff09;是用于图像分析和模式识别的一种特征表示方法&#xff0c;用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以…

[OnWork.Tools]系列 05-系统工具

简介 系统工具主要是将Window常用工具的快捷启动的集合 双击快速启动 计算器,记事本,截图,画图工具 控制面板,服务管理,关闭显示器,关机 启动文件夹,我的电脑,管理工具 右键菜单 添加快捷方式到桌面

React diff 根据相对位置的 diff 算法

文章目录 diff 算法没有 key 时的diff通过 key 的 diff查找需要移动的节点移动节点添加新元素移除不存在的元素缺点 diff 算法 没有 key 时的diff 根据新旧列表的长度进行 diff 公共长度相同的部分直接patch新列表长度>旧列表长度则添加&#xff0c;否则删除 function pa…

WPF实战项目十一(API篇):待办事项功能api接口

1、新建ToDoController.cs继承基础控制器BaseApiController&#xff0c;但是一般业务代码不写在控制器内&#xff0c;业务代码写在Service&#xff0c;先新建统一返回值格式ApiResponse.cs&#xff1a; public class ApiResponse{public ApiResponse(bool status, string mess…

git 报错 protocol ‘https‘ is not supported解决

报错原因&#xff1a;选择不了其他分支代码&#xff0c;甚至都看不到其他分支&#xff0c;我这边解决了两次报错&#xff0c;情况如下&#xff1a; 第一种报错&#xff1a; idea中刷新分支报错如下&#xff1a; Fetch Failed protocol https is not supported 话不多说&#…

【安装部署】Mysql下载及其安装的详细步骤

1.下载压缩包 官网地址&#xff1a;www.mysql.com 2.环境配置 1.先解压压缩包 2.配置环境变量 添加环境变量&#xff1a;我的电脑--->属性-->高级-->环境变量-->系统变量-->path 3.在mysql安装目录下新建my.ini文件并&#xff0c;编辑my.ini文件 编辑内容如…

基于TF-IDF+TensorFlow+词云+LDA 新闻自动文摘推荐系统—深度学习算法应用(含ipynb源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境TensorFlow环境方法一方法二 模块实现1. 数据预处理1&#xff09;导入数据2&#xff09;数据清洗3&#xff09;统计词频 2. 词云构建3. 关键词提取4. 语音播报5. LDA主题模型6. 模型构建 系统测试工程源代码下载…

SpringBoot 依赖管理

Spring Boot 依赖管理 在 Spring Boot 中&#xff0c;依赖管理是通过 Maven 或 Gradle 进行管理的。Spring Boot 提供了一种简化的方式来管理和引入依赖项&#xff0c;使得构建和管理项目变得更加容易。下面是一些关于 Spring Boot 依赖管理的基本信息和示例&#xff1a; 使用…