VUE+ECharts从数据库中获取数据(柱状图、扇形图)

VUE+ECharts从数据库中获取数据(柱状图、扇形图)

引言:

        本文主要分享了如何使用ECharts画出柱状图、扇形图并与后端交互完成数据的动态更新;包括:环境的echarts的环境搭建,绘制图形、完成后端业务代码;

1. 配置ECharts环境

        ECharts是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器,底层依赖矢量图形库,提供直观,交互丰富,可高度个性化定制的数据可视化图表;ECharts提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图,并且支持图与图之间的混搭;

1.1 安装Echarts_VUE

导入一个即可

npm install echarts -g --save
npm install --save echarts

1.2 项目中引入Echarts

在main.js中导入

import echarts from 'echarts'  //引入Echarts,
Vue.prototype.$echarts = echarts  //定义为全局变量

2. 柱状图及动态交互

  1. 引入官网代码画出柱状图;
  2. 通过数据库获取数据;
  3. 把数据展示到前台,实现动态交互;

2.1 后台实现

从数据库查出各个年龄段对应的总和,向前端传入一个数组

    @CrossOrigin
    @RequestMapping(value = "/findPatientAge", method = RequestMethod.GET)
    public ActionResult findAllAgeP() {
        //new一个结果集
        ActionResult actionResult = new ActionResult();
        //调用查询年龄段的方法
        List<PatientAge> allTOAgeService = patientService.findAllTOAgeService();
        //返回响应值
        actionResult.setStatusCode(200);
        //定义List集合转化为纯数组
        List<Object> ints = new ArrayList<>();
        for (int i = 0; i < allTOAgeService.size(); i++) {
            //获取年龄
            ints.add(allTOAgeService.get(i).getDatay());
        }
        actionResult.setData(ints);
        return actionResult;
    }

在这里插入图片描述

2.2 Vue实现

  1. 在动态交互前必须要有静态数据,是通过索引赋值的,所有值不能为空(绘制静态图形);
  2. 在template中申请一个div块,放所绘制的图形;
  3. 需要加入watch监听

2.2.1 核心代码

 created() {
    this.$axios.get("findPatientAge").then((response) => {
      console.log(response);
      if (response.data.statusCode == 200) {
        this.datay.length = 0; //清空数组
        for (let i = 0; i < response.data.data.length; i++) {
          this.datay.push(response.data.data[i]);
        }
        console.log(this.datay);
      }
    });
  },
<template>
  <div>
    <div
      class="HelloWorld echart-box"
      id="myChart1"
      :style="{width: '1000px', height: '500px',background:'#ffffff'}"
    ></div>
  </div>
</template>

<script>
var that = this;
export default {
  data() {
    return {
      // 定义图表,各种参数
      msg: "柱状图",
      datay: [5, 10, 43, 54, 34, 32],
    };
  },
  mounted: function () {
    this.drawLine(); //按照默认值绘制图表
  },
  created() {
    this.$axios.get("findPatientAge").then((response) => {
      console.log(response);
      if (response.data.statusCode == 200) {
        this.datay.length = 0; //清空数组
        for (let i = 0; i < response.data.data.length; i++) {
          this.datay.push(response.data.data[i]);
        }
        console.log(this.datay);
      }
    });
  },
  watch: {
    datay: {
      //对于深层对象的属性,watch不可达,因此对数组监控需要将数组先清空,再添加数据
      handler: function () {
        this.drawLine();
      },
      deep: true,
    },
  },
  methods: {
    drawLine() {
      // 1、基于准备好的dom,初始化echarts实例
      let myChart = this.$echarts.init(document.getElementById("myChart1"));
      //2、构造图表数据
      let options = {
        title: {
          text: "年龄情况分析",
          left: "center",
          tooltip: {},
        },
        xAxis: {
          data: [
            "0~10",
            "10~20",
            "21~30",
            "31~40",
            "41~50",
            "51~60",
            "61~70",
            "71~80",
            "80以上",
          ],
        },
        yAxis: {},
        series: [
          {
            name: "年龄",
            data: this.datay,
            type: "bar",
          },
        ],
      };
      // 3、绘制图表
      myChart.setOption(options);
    },
  },
};
</script>

2.3 结果展示

初始化数据

动态交互

3. 扇形图及动态交互

3.1 后台实现

因为扇形是一个key,value的形式所以需要两个值;

  1. 从数据库查出对应的值;
  2. 向前端传入一个对象
  @CrossOrigin
    @RequestMapping(value = "/findPatientSex", method = RequestMethod.GET)
    public ActionResult findAllSexP() {
        ActionResult actionResult = new ActionResult();
        List<SexSum> allSexService = patientService.findAllSexService();
        actionResult.setData(allSexService);
        actionResult.setStatusCode(200);
        return actionResult;
    }

在这里插入图片描述

3.2 Vue实现

将传过来的对象加入数据源中,思路同柱状图

3.2.1 核心代码

created() {
    this.$axios.get("findPatientSex").then((response) => {
      console.log(response);
      if (response.data.statusCode == 200) {
        this.datas.length = 0; //清空数组
        for (let i = 0; i < response.data.data.length; i++) {
          this.datas.push(response.data.data[i]);
          console.log(this.datas);
        }
      }
    });
  },
<template>
  <div>
    <div
      class="HelloWorld echart-box"
      id="myChart1"
      :style="{width: '1000px', height: '500px',background:'#ffffff'}"
    ></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 定义图表,各种参数
      msg: "扇形图",
      datas: [
        { value: 64, name: "男" },
        { value: 32, name: "女" },
        { value: 12, name: "未知" },
      ],
    };
  },
  mounted: function () {
    this.drawLine(); //按照默认值绘制图表
  },
  created() {
    this.$axios.get("findPatientSex").then((response) => {
      console.log(response);
      if (response.data.statusCode == 200) {
        this.datas.length = 0; //清空数组
        for (let i = 0; i < response.data.data.length; i++) {
          this.datas.push(response.data.data[i]);
          console.log(this.datas);
        }
      }
    });
  },
  watch: {
    datas: {
      handler: function () {
        this.drawLine();
      },
      deep: true,
    },
  },
  methods: {
    drawLine() {
      // 1、基于准备好的dom,初始化echarts实例
      let myChart = this.$echarts.init(document.getElementById("myChart1"));
      //2、构造图表数据
      let options = {
        title: {
          text: "婚姻情况分析",
          left: "center",
        },
        tooltip: {
          trigger: "item",
          formatter: "{a} <br/>{b} : {c} ({d}%)",
        },
        legend: {
          orient: "vertical",
          left: "left",
          data: ["男", "女", "未知"],
        },
        series: [
          {
            name: "访问来源",
            type: "pie",
            radius: "55%",
            center: ["50%", "60%"],
            data: this.datas,
            emphasis: {
              itemStyle: {
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: "rgba(0, 0, 0, 0.5)",
              },
            },
          },
        ],
      };
      // 3、绘制图表
      myChart.setOption(options);
    },
  },
};
</script>

3.3 结果展示

在这里插入图片描述

在这里插入图片描述

4. 后端传Map集合

4.1 后台实现

后台如果传Map集合,到前台就是一个“二维数组”,拿数据的方式;

 @CrossOrigin
    @RequestMapping(value = "/findPatientSex", method = RequestMethod.GET)
    public ActionResult findAllSexP() {
        ActionResult actionResult = new ActionResult();
        Map<String, Object> objectHashMap = new HashMap<>();
        String[] name = {"男", "女", "未知"};
        String[] data = {"164", "32", "18"};
        objectHashMap.put("name", name);
        objectHashMap.put("data", data);
        actionResult.setData(objectHashMap);
        actionResult.setStatusCode(200);
        return actionResult;
    }

在这里插入图片描述

4.2 Vue实现

仅展示created部分,其余同上

created() {
    this.$axios.get("findPatientSex").then((response) => {
      console.log(response);
      if (response.data.statusCode == 200) {
        this.datas.length = 0; //清空数组
        for (let i = 0; i < response.data.data.length; i++) {
          var item = {
            value: response.data.data.data[i],
            name: response.data.data.name[i],
          };
          this.datas.push(item);
          console.log(this.datas);
        }
      }
    });
  },

4.3 结果展示

在这里插入图片描述

### 回答1: Echarts是一款基于JavaScript的开源可视化库,可以通过它来创建各种图表。当我们需要从数据库获取数据来展示在图表上时,可以采取以下步骤: 1. 连接数据库:首先,我们需要通过合适的方式连接到数据库。常见的数据库包括MySQL、Oracle、MongoDB等。可以使用相应的数据库连接工具,或者通过编程语言提供的库来连接数据库。 2. 查询数据:连接到数据库后,我们可以使用SQL语句或其他查询方式来获取需要的数据。可以根据具体需求编写相应的查询语句,根据数据表的结构和关系进行查询和筛选。 3. 处理数据:获取到数据后,我们可能需要对数据进行一些处理和转换,以便适配Echarts的数据格式。例如,我们可能需要将数据库查询结果转换为JSON格式的数据,或者对日期数据进行格式化处理。 4. 传递数据给Echarts:处理完数据后,我们可以将数据传递给Echarts进行图表展示。可以使用Echarts提供的API方法来将数据传递给相应的图表类型,例如柱状图、折线图等。 5. 渲染图表:一般来说,我们需要在网页创建一个容器,然后使用Echarts提供的方法将图表渲染到容器。可以通过指定容器的ID,将图表渲染到相应的位置上。 通过以上步骤,我们可以从数据库获取数据,并通过Echarts来展示在图表上。这样可以更直观地展示数据,提供给用户更好的交互和分析体验。 ### 回答2: ECharts是一款开源的数据可视化库,可以通过JavaScript编写和展示各种图表。要从数据库获取数据并将其传递给ECharts,需要以下步骤: 1. 连接数据库:首先,需要使用合适的数据库连接工具来连接数据库。常见的数据库类型包括MySQL、Oracle、SQL Server等。连接数据库需要提供数据库地址、用户名、密码等必要的凭证。 2. 查询数据:一旦连接成功,可以编写SQL查询语句来从数据库检索所需的数据。查询语句应该指定要获取的字段和表,以及任何必要的条件。例如,可以使用SELECT语句来选择特定字段的值以及满足某些条件的记录。 3. 处理数据:一旦从数据库获取到数据,可以将其存储在一个合适的数据结构,例如数组或对象。可以使用服务器端的脚本语言(如PHP、Python)或客户端的JavaScript等进行数据处理,筛选和转换数据,以便ECharts可以更轻松地读取和使用这些数据。 4. 传递数据给ECharts:一旦数据准备好,可以将其传递给ECharts的实例。使用ECharts的API方法,可以将数据传递给相应的图表组件,并在前端页面上展示。 总结:使用ECharts数据库获取数据需要进行数据库连接、查询数据、数据处理、数据传递等步骤。这需要通过合适的数据库连接工具连接数据库,编写查询语句来选择和检索所需的数据,对数据进行处理和转换,最后将数据传递给ECharts实例,以便创建和展示相应的图表。 ### 回答3: echarts是一款基于JavaScript的数据可视化库,可以通过从数据库获取数据来生成图表。在使用echarts时,我们可以通过以下步骤来从数据库获取数据: 1. 连接数据库:首先,我们需要使用数据库连接工具,比如MySQL、Oracle或者MongoDB等,来连接数据库,以便能够访问和操作数据库的数据。 2. 查询数据:一旦成功连接到数据库,我们可以使用SQL语句或者其他数据库查询命令来从数据库获取所需的数据。根据数据的类型和结构,我们可以编写相应的查询语句来获取特定的数据。 3. 数据处理:从数据库获取到数据后,我们可以对数据进行一些处理,比如排序、聚合、过滤等,以便满足生成图表所需要的数据格式和要求。 4. 数据转换:将获取到的数据转换为echarts所需要的数据格式。echarts通常接受JSON格式的数据,可以通过将数据库的数据转换为JSON格式,或者利用服务器端脚本语言如PHP、Python等来处理转换。 5. 生成图表:一旦完成数据的处理和转换,我们可以使用echarts提供的API,以及HTML和JavaScript等技术,来生成具体的图表。可以根据需要选择不同类型的图表,比如折线图、柱状图、饼图等,也可以进行定制化的设置和样式调整。 总之,使用echarts数据库获取数据可以通过连接数据库、查询数据、数据处理、数据转换和生成图表等步骤来完成。这样我们可以将数据库的数据可视化展示出来,方便用户更直观地理解和分析数据。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willing卡卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值