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

使用 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.dtcms.com/a/316781.html

相关文章:

  • Leetcode-2080区间内查询数字的频率
  • Spring AI 系列之三十六 - Spring AI Alibaba-nl2sql
  • 02--类和对象
  • 大厂面试题
  • React在使用create-react-app创建项目慢的解决办法
  • TanStack React Query 完全指南:从0到精通
  • Flux.1系列模型解析--Flux.1 Tools
  • 【模电笔记】—— 直流稳压电源——整流、滤波电路
  • 无线网络扫描工具 ‌WifiInfoView‌
  • 高通平台Wi-Fi Display学习-- 调试 Wi-Fi Display 问题
  • 人工智能领域、图欧科技、IMYAI智能助手2024年全年历史更新大事件汇总
  • 人工智能领域、图欧科技、IMYAI智能助手2025年6月更新月报
  • RHCA05--进程管理与文件系统管理
  • 基于SpringBoot的青少年网络安全教育系统
  • C语言:20250805学习(文件预处理)
  • 系统集成项目管理工程师【第十一章 规划过程组】项目管理计划、范围管理与收集需求篇
  • VUE丢失long类型精度,使用 json-bigint 库解析大整数
  • 基于腾讯iOA的企业安全防护体系融合升级指南:从边界防御到无边界纵深防护
  • 前端工程化:Vue3(二)
  • 在X86架构Linux中创建虚拟根目录并下载指定架构(如aarch64)的软件包(含依赖)
  • opencv 阈值分割函数
  • ASP3605I同步降压调节器的高频化设计与多相扩展技术优化方案
  • python的教务管理系统
  • Android中性能优化——白屏避免
  • Makefile基础
  • C/C++ 宏中 `do { ... } while (0)` 的“零次循环”技巧
  • Windows 远程管理 (WinRM)问题详解包括c#与python例子
  • vue - - - - 18n高级使用(插入变量)
  • Pycharm 2025.2 免登陆试用
  • Centos-Stream 10 安装教程(2025版图文教程)