当前位置: 首页 > backend >正文

使用 ECharts 实现小区住户数量统计柱状图

一、项目背景

在很多社区管理系统中,我们需要直观地展示各小区的住户数量分布情况。ECharts 作为一款强大的可视化图表库,能够帮助我们快速实现各类数据可视化需求。本文将介绍如何通过后端接口获取数据,并使用 ECharts 绘制小区住户数量统计柱状图。

二、技术栈

  • 后端:Spring Boot + MyBatis
  • 前端:HTML + JavaScript + ECharts
  • 数据库:MySQL(示例)

三、后端接口实现

1. 数据模型与数据库设计

我们需要两个主要表:

  • community:存储小区信息(community_id, community_name 等)
  • person:存储住户信息,包含关联小区的 community_id 字段

2. Mapper 层实现

EchartsMapper.java

package com.qcby.mapper;import org.apache.ibatis.annotations.Mapper;
import java.util.List;@Mapper
public interface EchartsMapper {// 获取所有小区名称List<String> selectName();// 获取每个小区的住户数量List<Integer> selectCount();
}

EchartsMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qcby.mapper.EchartsMapper"><select id="selectName" resultType="java.lang.String">SELECT community_name FROM community</select><select id="selectCount" resultType="java.lang.Integer">SELECT COUNT(*)  FROM community c LEFT JOIN person p on c.community_id=p.community_id GROUP BY c.community_id</select>
</mapper>

3. Controller 层实现

EchartsController.java

package com.qcby.controller;import com.qcby.Utils.Result;
import com.qcby.mapper.EchartsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/sys/inOut")
public class EchartsController {@Autowiredprivate EchartsMapper echartsMapper ;@RequestMapping("/chart")public Result getEcharts(){// 准备返回数据Map<String, Object> data = new HashMap<>();// 小区名称列表List<String> names = echartsMapper.selectName();// 住户数量列表List<Integer> nums = echartsMapper.selectCount();// 饼图数据列表(本文主要讲柱状图,此数据可用于其他图表)List<Map<String, Object>> list = new ArrayList<>();for (int i = 0; i < names.size(); i++) {Map<String, Object> item = new HashMap<>();item.put("name", names.get(i));item.put("value", nums.get(i));list.add(item);}// 将数据放入data对象data.put("names", names);data.put("nums", nums);data.put("list", list);return Result.ok().put("data", data);}
}

4. 接口返回格式

接口地址:GET /sys/inOut/chart(无参数)

返回示例:

{"msg": "操作成功","code": 200,"data": {"names": ["栖海澐颂","宸悦国际","流星花园二区","农学院家属院","金达园","建发城建·文源府","北清云际"],"nums": [5,3,1,2,4,2,1],"list":[{"name": "栖海澐颂","value": 5},// 更多数据...]}
}

四、前端 ECharts 实现

1. 引入 ECharts

可以通过 CDN 引入:

<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>

或者下载到本地后引入:

<script src="js/echarts.min.js"></script>

2. HTML 结构

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>小区住户数量统计</title><script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script><style>.chart-container {width: 800px;height: 500px;margin: 50px auto;}</style>
</head>
<body><div class="chart-container" id="barChart"></div><script src="js/chart.js"></script>
</body>
</html>

3. JavaScript 实现

chart.js

// 初始化图表
var chartDom = document.getElementById('barChart');
var myChart = echarts.init(chartDom);
var option;// 从后端获取数据
fetch('/sys/inOut/chart').then(response => response.json()).then(data => {if (data.code === 200) {// 设置图表配置option = {title: {text: '小区住户数量统计',left: 'center'},tooltip: {trigger: 'axis',axisPointer: {type: 'shadow'}},grid: {left: '3%',right: '4%',bottom: '3%',containLabel: true},xAxis: {type: 'category',data: data.data.names,axisLabel: {// 让x轴标签旋转,防止重叠rotate: 30}},yAxis: {type: 'value',name: '住户数量',minInterval: 1  // 保证y轴刻度为整数},series: [{name: '住户数量',type: 'bar',data: data.data.nums,itemStyle: {// 设置柱形颜色color: function(params) {var colorList = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452'];return colorList[params.dataIndex % colorList.length];}},// 显示数值label: {show: true,position: 'top'}}]};// 渲染图表myChart.setOption(option);} else {console.error('获取数据失败:', data.msg);}}).catch(error => {console.error('请求出错:', error);});// 响应窗口大小变化,重新绘制图表
window.addEventListener('resize', function() {myChart.resize();
});

五、实现效果

图表将展示各小区的住户数量对比,x 轴为小区名称,y 轴为住户数量,每个柱子上方将显示具体数值,鼠标悬停时会显示详细信息。不同的小区会用不同的颜色区分,整体布局简洁明了。

六、总结

通过本文的实现,我们完成了从后端接口获取小区住户数据,到使用 ECharts 绘制柱状图的全过程。主要步骤包括:

  1. 设计数据库表结构并编写 MyBatis 映射
  2. 实现后端接口,返回所需的统计数据
  3. 前端引入 ECharts 库,编写 HTML 结构
  4. 通过 JavaScript 请求后端接口,获取数据并配置 ECharts 图表
  5. 渲染图表并处理窗口大小变化

这种实现方式不仅可以用于小区住户统计,还可以根据实际需求修改后端接口和前端配置,应用于各种数据统计场景。

http://www.xdnf.cn/news/16993.html

相关文章:

  • 豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索
  • 涨薪技术|Kubernetes(k8s)之Pod生命周期(上)
  • 山东省天地图API申请并加载到QGIS和ArcGIS Pro中
  • pyspark中的kafka的读和写案例操作
  • 面向对象编程基础:类的实例化与对象内存模型详解
  • Oracle 在线重定义
  • 【unitrix】 7.2 二进制位减法(bit_sub.rs)
  • MySQL偏门但基础的面试题集锦
  • MySql的两种安装方式
  • MySQL Router
  • VUE2 学习笔记17 路由
  • 华为OD机考2025C卷 - 最小矩阵宽度(Java Python JS C++ C )
  • 架构师面试(三十九):微服务重构单体应用
  • 【C++】语法基础篇
  • Javascript面试题及详细答案150道(046-060)
  • Flask全栈入门:打造区块链艺术品交易所
  • 风光储并网协同运行simulink仿真模型实现
  • transformer与神经网络
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 5 部分
  • 进程间通信:管道与共享内存
  • Antlr学习笔记 02、使用antlr4实现简易版计算器
  • 【无标题】标准 I/O 中的一些函数,按功能分类说明其用法和特点
  • 【LeetCode刷题集】--排序(一)
  • clocking_cb驱动之坑
  • BackgroundTasks 如何巧妙驾驭多任务并发?
  • 测试-概念篇(3)
  • <PhotoShop><JavaScript><脚本>基于JavaScript,利用脚本实现PS软件批量替换图片,并转换为智能对象?
  • Linux 逻辑卷管理
  • 深入理解Spring中的循环依赖及解决方案
  • ssh连接VirtualBox中的Ubuntu24.04(win11、putty、NAT 模式)