首页 > 编程语言 >java在项目中实现个性化定制的数据可视化图表———静态,动态获取数据

java在项目中实现个性化定制的数据可视化图表———静态,动态获取数据

时间:2024-08-26 18:55:14浏览次数:14  
标签:map java data ECharts 图表 获取数据 可视化 type echarts

一、Echarts介绍

ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。

2021年1月26日晚,Apache基金会官方宣布ECharts项目正式毕业。1月28日,ECharts 5线上发布会举行

二、入门使用

  1. 下载js,引入js
  2. 页面准备存放图标的dom
  3. cv官方代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!-- 为 ECharts 准备一个定义了宽高的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
<script src="/lib/echarts.min.js"></script>
<script type="text/javascript">
  // 基于准备好的dom,初始化echarts实例
  var myChart = echarts.init(document.getElementById('main'));

  // 指定图表的配置项和数据
  var option = {
    title: {
      text: 'ECharts 入门示例'
    },
    tooltip: {},
    legend: {
      data: ['销量']
    },
    xAxis: {
      data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
    },
    yAxis: {},
    series: [
      {
        name: '销量',
        type: 'bar',
        data: [5, 20, 36, 10, 10, 20]
      }
    ]
  };

  // 使用刚指定的配置项和数据显示图表。
  myChart.setOption(option);
</script>
</body>
</html>

image-20230619231210101

各种图形

改变series:中的type即可

API: Documentation - Apache ECharts

交互

异步数据加载

动态的异步数据 - 数据处理 - 应用篇 - Handbook - Apache ECharts

三、Vue2中使用Echarts[静态]

3.1 安装echarts

npm install echarts --save

注意: 这样下载是最新版echarts

3.2 创建组件

创建一个vue组件,用来展示报表数据

3.3 开发echarts

3.3.1 引入echarts

import * as echarts from 'echarts'

老版本引入方式 (Echartsv4版本)

import echarts from ‘echarts’;

新版本引入方式 (Echartsv5版本)

import * as echarts from 'echarts';

3.3.2 创建图表容器

<template>
  <div id="chart" style="width: 600px; height: 400px;"></div>
</template>

3.3.3 初始化图表

在vue组件的js部分,需要在组件的mounted生命周期钩子中初始化ECharts图表。这是因为在这个阶段,图表容器已经被插入到DOM中,可以被ECharts访问。

export default {
  name: 'MyChart',
  mounted() {
    this.initChart()
  },
  methods: {
    initChart() {
      const chart = echarts.init(document.getElementById('chart'))
      // ...
    }
  }
}

特别注意: 此处这个生命周期构造函数必须是mounted的,否则dom对象无法使用,导致报错

3.3.4 配置图表

在initChart方法中,需要定义一个包含图表配置的对象。这个对象应该包含图表的标题、提示框、图例、X轴和Y轴配置,以及一个或多个系列对象,这些对象定义了图表的类型和数据。

const option = {
  title: {
    text: 'ECharts 示例'
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['销量']
  },
  xAxis: {
    type: 'category',
    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: '销量',
      type: 'bar',
      data: [5, 20, 36, 10, 10, 20]
    }
  ]
}

3.3.5 使用图表配置

在initChart方法中,使用setOption方法将配置对象应用到图表上。

chart.setOption(option)

3.3.6 完整代码

<template>
<div>
    <!-- 1设置容器 -->
  <div id="chart" style="width: 600px; height: 400px;"></div>
</div>
</template>

<script>
import * as echarts from 'echarts'
export default {
  name: "Echarts",
  mounted() {
    this.initChart()
  },
  methods: {
    initChart() {
      // 2初始化
      const chart = echarts.init(document.getElementById('chart'))
      // 3配置
      const option = {
        title: {
          text: 'ECharts 示例'
        },
        tooltip: {
          trigger: 'axis'
        },
        legend: {
          data: ['销量']
        },
        xAxis: {
          type: 'category',
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {
          type: 'value'
        },
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      }
      // 4使用图表配置
      chart.setOption(option)
    }
  }
}
</script>
<style scoped>
</style>

3.3.7 启动测试

image-20231219145357068

四、异步获得数据[动态]

目前这是静态固定写死的数据,现在要从后台获得数据展现成报表

需求: 展现性别系统中用户性别的柱状图

前端:

1.设置容器展示报表

 <div id="chart2" style="width: 600px; height: 400px;"></div>

2.发送请求异步从后台获得数据

mounted() {
  this.initChart2()
},
methods: {
  // 动态演示数据
  initChart2(){
    // 初始化
    const chart = echarts.init(document.getElementById('chart2'))
    axios.get('/api/sysUser/echarts').then(res => {
      // console.log("res",res)
     
    })
  }
}

3.拿到数据后初始化报表,填充数据

axios.get('/api/sysUser/echarts').then(res => {
        // console.log("res",res)
        let retData = res.data.data;
        const options = {
          title: {
            text: '系统用户性别比例图'
          },
          tooltip: {
            trigger: 'axis'
          },
          legend: {
            data: ['性别']
          },
          xAxis: {
            type: 'category',
            data: retData.sexX    // 从后端获得x轴展示内容
          },
          yAxis: {
            type: 'value'
          },
          series: [
            {
              name: '性别',
              type: 'bar',
              data: retData.sexY  // 从后端获得x轴展示数据
            }
          ]
        }
        // 使用图表配置
        chart.setOption(options)
      })

后端:

1.查询数据

2.封装数据

3.响应给前端

    /**
     * 报表展现
     * @return
     */
    @GetMapping("/echarts")
    public R showEcharts() {
        // 模拟假数据,要注意对应
        HashMap<String, Object> map = new HashMap<>( );
        map.put("sexX",Arrays.asList("男","女"));
        map.put("sexY",Arrays.asList("15","5"));
        return R.ok(map);
    }
/**
{
	code:2000,
	msg:"成功",
	data:{
		sexX: ['男','女'],
		sexY: [15,5]
	}
}
*/

image-20231219152742737

/*
    select sex,count(*) num
    from sys_user
    group by sex
    
    以上这个sql,查询返回需要使用List<Map>来接收
*/    
  
   @GetMapping("/echarts")
    public R showEcharts() {
        List<Map<String,Object>> resultMap = sysUserService.findSex4Charts();
        ArrayList<String> sexList = new ArrayList<>( );
        ArrayList<Object> numList = new ArrayList<>( );
        resultMap.forEach(map -> {
            String sex = (String)map.get("sex");
            if (sex.equals("0")){
                sexList.add("男");
            } else {
                sexList.add("女");
            }
            Object num = map.get("num");
            numList.add(num);
        });



        HashMap<String, Object> map = new HashMap<>( );
        map.put("sexX",sexList);
        map.put("sexY",numList);
        /**
         * {
         *     sexX: [男,女],
         *     sexY: [81,29]
         * }
         */
        return R.ok(map);
    }

标签:map,java,data,ECharts,图表,获取数据,可视化,type,echarts
From: https://blog.csdn.net/weixin_64942806/article/details/141569717

相关文章

  • 如何构建KPL比赛在线售票系统——Java SpringBoot与Vue的完美结合
    ......
  • Java 入门指南:初识 Java IO
    JavaIOJavaIO(Input/Output)是Java编程语言中用于处理输入和输出的标准库,它提供了一组类和接口,用于在程序和外部世界(如文件、网络连接、内存等)之间进行数据传输。IO,即in和out,也就是输入和输出,即应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络......
  • Java将数据导出为Excel文件
    使用ApachePOI生成基本ExcelApachePOI是一个强大的Java库,用来处理MicrosoftOffice文件。对于Excel文件(.xls和.xlsx)处理,提供有HSSF(.xls)和XSSF(.xlsx)等API。importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjavax.serv......
  • Java使用EasyExcel导出图片(原比例大小)到Excel中
    EasyExcel导出图片又开始写Excel导出的需求了,哈哈哈……目前的需求是将图表分析对的饼图和折线图,也就是一张完整的图片单独导出到Excel中为了方便客户在业务报告时,可以使用数据分析图片,从而更清晰准确地展示数据趋势因此关键点是将图片原比例尺寸大小导出,不能进行压缩原数......
  • java+vue计算机毕设特色农产品销售系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网普及率的不断提高,电子商务已成为推动传统产业升级转型的重要力量。在农业领域,特色农产品的销售长期面临信息不对称、......
  • java+vue计算机毕设天津市为民律师事务所信息管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,律师事务所作为法律服务的重要提供者,其内部管理与服务效率直接影响到客户体验及行业竞争力。天津市为民律师事务所作为本地区......
  • java+vue计算机毕设天润方便面厂生产管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在快速消费品行业,方便面作为便捷食品的代表,其市场需求持续旺盛。随着消费者口味的多样化及健康意识的提升,方便面生产企业面临着产品创新、成本控制及......
  • 【JavaScript】String常用方法
    String的常用方法长度s.length拼接字符串s.concat('内容','可拼接多个'),或者使用+号链接符,返回一个新字符串位置查找字符串方法;返回字符​查找某位置上的字符s.charAt(下标)返回该下标位置上的字符,未找到返回空白​返回某位置上的字符s[下标](只读,不能赋值),不支......
  • JavaScript 对象访问器
    JavaScript访问器(Getter和Setter)Getter和Setter允许您定义对象访问器(被计算的属性)。<!DOCTYPEhtml><htmllang="en"><body><pid="demo"></p><script>constperson={nama:"DianDi......
  • [javascript] 使用 puppeteer 包模拟 chrome 自动化
    npmipuppeteerconstpuppeteer=require('puppeteer');functionsleep(ms){returnnewPromise(resolve=>setTimeout(resolve,ms));}asyncfunctionrun(){constbrowser=awaitpuppeteer.launch({headless:false,args:['--st......