Echart图表在项目中的前后端使用详解

目录
  • 前言
  • 一、项目架构
  • 二、进入Echart官网学会自我分析
    • 2.1 Echart官方文档
    • 2.2 Echart基础代码常识
  • 三,折线图使用
    • 3.1 基础折线图
    • 3.2 平滑折线图
    • 3.3 面积折线图
    • 3.4 炫酷组合图

前言

图表在我们的项目中可以帮我们很明确的看到我们想要看到的数据,并且通过操控图表,可以很快获得你想要的信息,在b站上同学们看见一些炫酷的可视化图表时否觉得好炫酷,好牛逼。一看这个项目就很nb,现在临近毕业设计阶段,学会如何使用Echart图表,或许会让你的项目打动老师,也会让你在编写论文中有话好说。在工作中会一手图表,在leader眼中你就是个人才。好了,废话不多说,开干!

一、项目架构

我的文章会涉及图片中的表格使用,如果你都学会了,可以去Echart官网使用更高级炫酷的表了。

二、进入Echart官网学会自我分析

2.1 Echart官方文档

Echart官网

进入官网

进入所有实例

点击基础折线图

以上就是你在使用Echart图表所需要的步骤。

2.2 Echart基础代码常识

我们引入基础折图来讲解:

import * as echarts from 'echarts';//引入echarts资源

var chartDom = document.getElementById('main');//定位你图表显示的前端id=main的块
var myChart = echarts.init(chartDom);//初始化前端块中的图表
var option; //图表对象

option = {
  xAxis: { //图标对象中x轴
    type: 'category', //线条类型
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] //当前轴上的数据
  },
  yAxis: { //图标对象中y轴
    type: 'value' //类型为value
  },
  series: [
    { //与x轴对应的对象值,比如‘Mon'对'150'
      data: [150, 230, 224, 218, 135, 147, 260],
      type: 'line' //类型是线条
    }
  ]
};

option && myChart.setOption(option); //将option对象存入chart,setOption的意思就是修改。

三,折线图使用

3.1 基础折线图

前端实现:

  1. 创建一个.vue文件
  2. 定义一个显示图表的前端代码块
  3. 定位id
  4. 初始化chart
  5. 定义option对象
  6. 调用创建方法

创建一个.vue文件

页面结构:

<template>
  //这里放表的div
</template>

<script>

export default{ //JS代码块框架

    data(){
        return{

        }
    }

}

</script>

定义一个显示图表的前端代码块

<template>
<div class="width:600px;height:400;">
   <div id="main"></div>
</div>
</template>
<script>
export default{

    data(){
        return{

        }
    }
}

</script>

定位id并初始化chart

<template>
    <!-- 用来放echarts图表的容器,一定要有宽高 -->
 <div>
 <div id="main" style="height: 300px;width: 400px;"></div>
</div>

</template>

<script>
import * as echarts from 'echarts';
export default {
    data (){
        return{
        }
    },
    mounted() {
        this.getchart();//定义一个接口方法在methods中调用
    },
    methods: {

        //图表方法
        getchart() {
            //获取id并初始化图表
            var chartDom  = document.getElementById('main');
            var myChart = echarts.init(chartDom);
            //配置项
            var option;
            option = {
           xAxis: {
              type: 'category',
              data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
            },
           yAxis: {
            type: 'value'
             },
            series: [
              {
              data: [150, 230, 224, 218, 135, 147, 260],
           type: 'line'
             }
           ]
         };
            option && myChart.setOption(option)//通过setOption()方法生成图表
        },
    },
}
</script>
<style scoped>
    .generalStyle {
        width: 100%;
        height: 90%;
    }
</style>

运行结果:

现在我们前端已经可以展示了,但是前端的数据是写死的,如何才可以调用后端来实现数据的前后端交互呢?

后端实现:

  1. 分析前端代码
  2. 前端编写请求方法
  3. 前端替换数据
  4. 编写后端方法

分析前端代码:

编写请求方法

我们在methods中编写请求接口的代码,我们用到的是axios。

在我们的vue项目中的main.js中设置路由,

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './assets/css/global.css'

// 导入iconfront
import './assets/font/iconfont.css'
// 导入axios
import axios from 'axios'
Vue.prototype.$echarts = window.echarts
// 挂载axios 到Vue的原型prototype的$http
Vue.prototype.$http = axios
// 设置请求的根路径
axios.defaults.baseURL = "http://localhost:9000/" //项目上线改为后台服务器域名,即可实现域名绑定
axios.interceptors.request.use(config => {
  console.log(config);
  // 请求头挂载信息
  config.headers.Authorization = window.sessionStorage.getItem("flag");
  // 在最后必须return config
  return config;
})
Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

然后回到刚刚创建的vue页面编写接口请求方法:

在data中定义下x,ydata变量

      data (){
        return{
            xdata:[], //保存接口返回的x轴坐标数据
            ydata:[]  //保存接口返回的y轴坐标数据
        }
    },

在methods编写接口方法;

    //调用后端接口

       async getSendata(){

        const { data: res } = await this.$http.post("api/echartdata"); //调用后端接口为api/echartdata的接口

        if(res!=null){
            //后端定义一个保存字符串的链表,通过‘,'切分,返回一个数组,或者后端返回一个数组链表
             this.xdata = res[0].split(","); //res是链表类型,第一个元素保存x轴data
             this.ydata = res[1].split(","); //res是链表类型,第二个元素保存y轴data
        }
        this.getchart() //数据获取完成重新初始表;
       },

替换数据

将表中的x轴data和y轴data替换为我们在data中定义好的:

xdata:[], //保存接口返回的x轴坐标数据

ydata:[] //保存接口返回的y轴坐标数据

后端代码

在controller层里编写接口方法:

    @PostMapping("/api/echartdata")
    public String getchartdata(){
      String x = "阿里,腾讯,百度,京东,美团";
      String y = "200,120,200,160,120";
      List<String> list = new LinkedList<>();
      list.add(x);
      list.add(y);
      String s = JSON.toJSONString(list);
        System.out.println(s);
      return s;
    }

我们这里就完整的写好了,现在开始运行;

记得初始化接口方法,才可以拿到后台数据;

前后端执行成功!

完整代码:

前端:

<template>
    <!-- 用来放echarts图表的容器,一定要有宽高 -->
 <div>
 <div id="main" style="height: 300px;width: 400px;"></div>
</div>

</template>

<script>
import * as echarts from 'echarts';
export default {
    data (){
        return{
            xdata:[], //保存接口返回的x轴坐标数据
            ydata:[]  //保存接口返回的y轴坐标数据
        }
    },
    mounted() {
        this.getSendata();//定义一个接口方法在methods中调用
    },
    methods: {

       //调用后端接口

       async getSendata(){

        const { data: res } = await this.$http.post("api/echartdata"); //调用后端接口为api/echartdata的接口

        if(res!=null){
            //后端定义一个保存字符串的链表,通过‘,'切分,返回一个数组,或者后端返回一个数组链表
             this.xdata = res[0].split(","); //res是链表类型,第一个元素保存x轴data
             this.ydata = res[1].split(","); //res是链表类型,第二个元素保存y轴data
        }
        this.getchart() //数据获取完成重新初始表;
       },

        //图表方法
        getchart() {
            //获取id并初始化图表
            var chartDom  = document.getElementById('main');
            var myChart = echarts.init(chartDom);
            //配置项
            var option;
            option = {
           xAxis: {
              type: 'category',
              data: this.xdata,
            },
           yAxis: {
            type: 'value'
             },
            series: [
              {
              data:this.ydata,
           type: 'line'
             }
           ]
         };
            option && myChart.setOption(option)//通过setOption()方法生成图表
        },
    },
}
</script>
<style scoped>
    .generalStyle {
        width: 100%;
        height: 90%;
    }
</style>

3.2 平滑折线图

我们在基础折线图里已经完成了代码框架的搭建,所以我们只需要去Echart实例里将我们初始化Echart函数换掉就可以;

完整代码:

<template>
    <!-- 用来放echarts图表的容器,一定要有宽高 -->
 <div>
 <div id="main" style="height: 300px;width: 400px;"></div>
</div>

</template>

<script>
import * as echarts from 'echarts';
export default {
    data (){
        return{
            xdata:[], //保存接口返回的x轴坐标数据
            ydata:[]  //保存接口返回的y轴坐标数据
        }
    },
    mounted() {
        this.getSendata();//定义一个接口方法在methods中调用
    },
    methods: {

       //调用后端接口

       async getSendata(){

        const { data: res } = await this.$http.post("api/echartdata"); //调用后端接口为api/echartdata的接口

        if(res!=null){
            //后端定义一个保存字符串的链表,通过‘,'切分,返回一个数组,或者后端返回一个数组链表
             this.xdata = res[0].split(","); //res是链表类型,第一个元素保存x轴data
             this.ydata = res[1].split(","); //res是链表类型,第二个元素保存y轴data
        }
        this.getchart() //数据获取完成重新初始表;
       },

        //图表方法
        getchart() {
            //获取id并初始化图表
       var chartDom = document.getElementById('main');
       var myChart = echarts.init(chartDom);
       var option;

     option = {
      xAxis: {
      type: 'category',
      data:this.xdata
     },
     yAxis: {
      type: 'value'
     },
     series: [
      {
      data: this.ydata,
      type: 'line',
      smooth: true
      }
    ]
  };
    option && myChart.setOption(option);
        },
    },
}
</script>
<style scoped>
    .generalStyle {
        width: 100%;
        height: 90%;
    }
</style>

执行结果:

3.3 面积折线图

还是不用多说我们直接换,但是刚刚平滑折线图不知道你有没有发现,就是其实和基础的折线图代码就在series中加了一个属性:

  series: [
    {
      data: [820, 932, 901, 934, 1290, 1330, 1320],
      type: 'line',
      smooth: true //开启平滑
    }
  ]

所以面积折线图也只需要修改series中的属性

  series: [
    {
      data: [820, 932, 901, 934, 1290, 1330, 1320],
      type: 'line',
      areaStyle: {} //面积属性
    }
  ]

看效果:

3.4 炫酷组合图

同样方法,替换初始化表格的方法,在将数据替换为后端接口返回的数据就可以为所欲为了!

在方法中直接引入后端接口返回res

将source数据替换

前端完整代码:

<template>
    <!-- 用来放echarts图表的容器,一定要有宽高 -->
 <div>
 <div id="main" style="height: 300px;width: 400px;"></div>
</div>

</template>

<script>
import * as echarts from 'echarts';
export default {
    data (){
        return{
            xdata:[], //保存接口返回的x轴坐标数据
            ydata:[]  //保存接口返回的y轴坐标数据
        }
    },
    mounted() {
        this.getchart();//定义一个接口方法在methods中调用
    },
    methods: {

        //图表方法
        getchart() {
            //获取id并初始化图表
            //调用后端接口
            const { data: res } = await this.$http.post("api/echartdata1"); //调用后端接口为api/echartdata的接口
            var chartDom = document.getElementById('main');
            var myChart = echarts.init(chartDom);
            var option;

            setTimeout(function () {
       option = {
      legend: {},
      tooltip: {
      trigger: 'axis',
      showContent: false
    },
    dataset: {
      source: [
         res[0].split(","),
         res[1].split(","),
         res[2].split(","),
         res[3].split(","),
         res[4].split(","),
      ]
    },
    xAxis: { type: 'category' },
    yAxis: { gridIndex: 0 },
    grid: { top: '55%' },
    series: [
      {
        type: 'line',
        smooth: true,
        seriesLayoutBy: 'row',
        emphasis: { focus: 'series' }
      },
      {
        type: 'line',
        smooth: true,
        seriesLayoutBy: 'row',
        emphasis: { focus: 'series' }
      },
      {
        type: 'line',
        smooth: true,
        seriesLayoutBy: 'row',
        emphasis: { focus: 'series' }
      },
      {
        type: 'line',
        smooth: true,
        seriesLayoutBy: 'row',
        emphasis: { focus: 'series' }
      },
      {
        type: 'pie',
        id: 'pie',
        radius: '30%',
        center: ['50%', '25%'],
        emphasis: {
          focus: 'self'
        },
        label: {
          formatter: '{b}: {@2012} ({d}%)'
        },
        encode: {
          itemName: 'product',
          value: '2012',
          tooltip: '2012'
        }
      }
    ]
  };
  myChart.on('updateAxisPointer', function (event) {
    const xAxisInfo = event.axesInfo[0];
    if (xAxisInfo) {
      const dimension = xAxisInfo.value + 1;
      myChart.setOption({
        series: {
          id: 'pie',
          label: {
            formatter: '{b}: {@[' + dimension + ']} ({d}%)'
          },
          encode: {
            value: dimension,
            tooltip: dimension
          }
        }
      });
    }
  });
  myChart.setOption(option);
});

option && myChart.setOption(option);

        },
    },
}
</script>
<style scoped>
    .generalStyle {
        width: 100%;
        height: 90%;
    }
</style>

后端完整代码:

 @PostMapping("/api/echartdata1")
    public String getchartdata1(){
        String data1 = "product, 2012, 2013, 2014, 2015, 2016, 2017";
        String data2 = "腾讯, 56.5, 82.1, 88.7, 70.1, 53.4, 85.1";
        String data3 = "阿里, 51.1, 51.4, 55.1, 53.3, 73.8, 68.7";
        String data4 = "京东, 40.1, 62.2, 69.5, 36.4, 45.2, 32.5";
        String data5 = "百度, 25.2, 37.1, 41.2, 18, 33.9, 49.1";
        List<String> list = new LinkedList<>();
        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);
        list.add(data5);
        String s = JSON.toJSONString(list);
        System.out.println(s);
        return s;
    }

运行:

以上就是Echart图表在项目中的前后端使用详解的详细内容,更多关于Echart图表使用的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue使用ECharts实现折线图和饼图

    在开发后台管理项目时,需要统计后台用户数据,以折线图和饼图的形式显示,这边采用apache-echarts来实现需求. 1.安装echarts和引入 npm install echarts --save import * as echarts from 'echarts'; 2.使用echarts实现pie图 <template> <div id="chartPie" class="pie-wrap"></div> </te

  • vue+echart实现双柱状图

    本文实例为大家分享了vue+echart实现双柱状图的具体代码,供大家参考,具体内容如下 效果图: 一.安装 版本号建议安装"echarts": "^4.8.0",其它版本init会报错 1. 首先需要安装echarts依赖包 npm install --save echarts@4.8.0 2. 或者使用国内的淘宝镜像: npm install -g cnpm --registry=https://registry.npm.taobao.org <templ

  • Vue导入Echarts实现折线散点图

    本文实例为大家分享了Vue导入Echarts实现折线散点图的具体代码,供大家参考,具体内容如下 效果图: 一.vue-cli中导入echarts 通过命令:npm install echarts --save进行下载到项目中,然后在项目中的main.js中进行导入且保存在vue的原型上. main.js代码如下: import Vue from 'vue' import App from './App.vue' const echarts = require("echarts") Vu

  • Vue实现Echarts图表宽高自适应的实践

    目录 1. 安装并引入 2. 定义防抖函数 3.  绘制图表代码 init 方法 resize 方法官网解释 1. 安装并引入 npm install echarts --save //main.js // import echarts from 'echarts'; import * as echarts from 'echarts'; // 如果安装的是echarts 5以上版本,则需此种方式引入 Vue.prototype.$echarts = echarts 2. 定义防抖函数 传送门:

  • vue echarts实现横向柱状图

    本文实例为大家分享了vue echarts实现横向柱状图的具体代码,供大家参考,具体内容如下 实现效果: 代码: <template> <div class="OverYearsPompany"> <div id="OverYearsPompanyChart" style="flex: 1; height: 368px; margin-top: -42px"></div> </div>

  • Echart图表在项目中的前后端使用详解

    目录 前言 一.项目架构 二.进入Echart官网学会自我分析 2.1 Echart官方文档 2.2 Echart基础代码常识 三,折线图使用 3.1 基础折线图 3.2 平滑折线图 3.3 面积折线图 3.4 炫酷组合图 前言 图表在我们的项目中可以帮我们很明确的看到我们想要看到的数据,并且通过操控图表,可以很快获得你想要的信息,在b站上同学们看见一些炫酷的可视化图表时否觉得好炫酷,好牛逼.一看这个项目就很nb,现在临近毕业设计阶段,学会如何使用Echart图表,或许会让你的项目打动老师,也会

  • Vue 项目中Echarts 5使用方法详解

    目录 前言 创建项目 基本使用 安装 使用方法 柱状图 动态排序柱状图 前言 Echarts 是一个纯JavaScript的图表库,兼容绝大部分的浏览器,底层依赖轻量级的canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表. 创建项目 先使用vue-cli创建一个新的项目,配置按照自己的需要选择,默认的也可 vue create vue_echarts cd vue_echarts npm run serve 基本使用 安装 首先安装echarts npm i

  • 关于在IDEA中SpringBoot项目中activiti工作流的使用详解

    记录一下工作流的在Springboot中的使用,,顺便写个demo,概念,什么东西的我就不解释了,如有问题欢迎各位大佬指导一下. 1.创建springboot项目后导入依赖 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version&

  • Springboot项目中使用redis的配置详解

    程序结构: 一.配置 1. 在pom.xml中添加依赖 pom.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q

  • Vue之前端体系与前后端分离详解

    目录 概述 前端知识体系 前端三要素 表现层(CSS) 行为层(JavaScript) JavaScript 框架 UI框架 JavaScript 构建工具 三端统一 混合开发(Hybrid App) 微信小程序 后端技术 主流前端框架 ElementUl ICE VantUl AtUl CubeUl 前端发展史 基于AJAX带来的SPA时代 此处的 MV* 模式如下: NodeJS带来的全栈时代 总结 概述 ​ Vue(读音/viu/,类似于 view)是一套用于构建用户界面的渐进式框架,发布

  • jquery项目中如何防重复提交详解

    在新项目中,axios能实现防重复提交的功能,不过老项目(例如jQuery)的项目中,没有axios.但是导入Ajax-hook 就可以实现 Ajax-hook源码地址 : https://github.com/wendux/Ajax-hook 导入 <script src="https://unpkg.com/ajax-hook@2.0.3/dist/ajaxhook.min.js"></script> ah对象是在导入ajaxhook.min.js后就会出现

  • vue项目中main.js使用方法详解

    目录 第一部分:main.js文件解析 第二部分:Vue.use的作用以及什么时候使用 Vue.use是什么?(官方文档) Vue.use()什么时候使用? 补充:关于main.js方便小技巧 总结 第一部分:main.js文件解析 src/main.js是入口文件,主要作用是初始化vue实例并使用需要的插件 在main.js文件中定义了一个vue对象,其中el为实例提供挂载元素 //基础配置 import Vue from 'vue' import App from './App.vue' /

  • iOS 项目中的version和build 详解

    iOS 项目中的version和build Version在plist文件中的key是"CFBundleShortVersionString",标识应用程序的发布版本号,和AppStore上的版本号保持一致.该版本的版本号是三个分隔的整数组成的字符串.第一个整数代表重大修改的版本,如实现新的功能或重大变化的修订.第二个整数表示的修订,实现较突出的特点.第三个整数代表维护版本 Build在plist文件中的key是"CFBundleVersion",标示(发布或者未发

  • Spring MVC项目中log4J和AOP使用详解

    前言 日志处理是每个项目当中一个非常重要的内容.没有了日志,也就失去了对系统的可控性.没有日志,系统出现任何问题,都会没有踪迹可寻,这对一个信息系统而言是非常危险的. 项目中需要将service中的类方法的调用过程,使用log4j日志记录. service中的类和方法都很多,不可能在每个类中单独添加log4j日志记录的功能,因此我们在这里使用AOP的思想进行横向切面. 以service类中的方法为切入点,通过AOP在方法调用前后使用log4j输出日志,内容包括正在调用的类和方法名. 在配置过程中

  • 如何在原有Android项目中快速集成React Native详解

    前言 RN经过一段时间发展,已经有充分数量的人尝试过了,就我身边就有几批,褒贬也不一: ① 做UI快 ② 还是有很多限制,不如原生Native ③ 入门简单,能让前端快速开发App ④ iOS&Android大部分代码通用 ⑤ code-push能做热更新,但是用不好依旧坑 ...... 在得到一些信息后,可以看出,要用RN高效率的做出比较不错的App是有可能的,单看投入度与最初设计是否合理,而且现在关于React Native的各种文档是相当丰富的,所以这个阶段想切入RN可能是一个不错的选择.

随机推荐