echart图表使用

2、接口编写

该部分代码定义了UserController控制器类,用于处理与用户相关的请求。包含一个用于跳转页面的方法和一个返回用户详细数据(以 JSON 格式呈现)的接口。前者负责将用户导航至指定页面,后者通过构建ChartVO对象并填充数据,为前端展示图表提供所需的数据支撑。

@Controller
@RequestMapping("/admin")
public class UserController {@RequestMapping("/index")public String toUserDetail() {return "admin/index";}// 返回 JSON 数据@GetMapping("/user/detail/getChartData")@ResponseBodypublic ChartVO getUserDetail() {ChartVO chartVO = new ChartVO();chartVO.setEasy(1);chartVO.setMedium(2);chartVO.setHard(3);chartVO.setXAxis(new String[]{"1", "2", "7", "4", "5", "6", "4", "8", "1", "10"});chartVO.setNums(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});chartVO.setYAxis4(new String[]{"1", "2", "7", "4", "5", "6"});chartVO.setType4(new Integer[]{1, 2, 3, 4, 5, 6});chartVO.setYAxis3(new String[]{"1", "2", "7", "4", "5", "6"});chartVO.setType3(new Integer[]{1, 2, 3, 4, 5, 6});return chartVO;}
}

3、引入echart组件

ECharts 是一款基于 JavaScript 的数据可视化图表库,通过模块化的加载方式适配不同的环境(如 CommonJS、AMD 或全局变量)。该代码片段通过自执行函数判断当前环境,将 ECharts 挂载到全局对象中,为后续在前端页面中使用 ECharts 渲染图表提供基础。


/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/(function (global, factory) {typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :typeof define === 'function' && define.amd ? define(['exports'], factory) :(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.echarts = {}));
}

4、前端页面代码

通过 Thymeleaf 模板引擎动态引入页面的头部导航、侧边栏和页脚等公共模块,并定义了多个用于渲染 ECharts 图表的容器(如#pie#line#echart3#echart4)。这些容器将与后续 JavaScript 代码配合,展示从后端获取的数据可视化图表。

<div class="wrapper"><!-- 引入页面头header-fragment --><div th:replace="admin/common/commons::header-nav"></div><!-- 引入工具栏sidebar-fragment --><div th:replace="admin/common/commons::sidebar-fragment(${path})"></div><!-- Content Wrapper. Contains page content --><div class="content-wrapper"><!-- Main content --><div class="content"><div class="container-fluid"><div class="analyze"><div class="fd-content-wrap fd-flex-wrap"><div class="fd-left-wrap fd-sr-wrap"><div class="fd-inner-wrap"><div class="echart" id="pie"></div></div></div><div class="fd-right-wrap"><div class="fd-inner-wrap fd-zc-wrap"><div class="echart" id="line"></div></div></div></div><div class="fd-content-wrap fd-flex-wrap"><div class="fd-left-wrap"><div class="fd-inner-wrap"><div class="echart" id="echart3"></div></div></div><div class="fd-right-wrap"><div class="fd-inner-wrap fd-szqsfx-chart-wrap"><div class="echart" id="echart4"></div></div></div></div></div></div></div><!-- /.content --></div><!-- /.content-wrapper --><!-- 引入页脚footer-fragment --><div th:replace="admin/common/commons::footer-fragment"></div>
</div>

5、前端js代码

通过echarts.init()方法创建图表实例,结合从后端获取的数据,定义图表的标题、颜色、提示框、坐标轴、数据系列等参数,最终使用setOption()方法将配置应用到图表中,实现 “薄弱点” 和 “通过题目较多的类型” 等数据的可视化展示。

<script th:inline="javascript">var myEchart4 = echarts.init(document.getElementById('echart4'));myEchart4.title = '坐标轴刻度与标签对齐';option4 = {// 标题title: {text: '薄弱点'},color: ['#3398DB'],tooltip: {trigger: 'axis',axisPointer: {            // 坐标轴指示器,坐标轴触发有效type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'}},grid: {left: '3%',right: '3%',top: '18%',  // 调整顶部间距containLabel: true},// 交换X轴和Y轴的定义yAxis: [{type: 'category',  // Y轴现在显示类别data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],axisTick: {alignWithLabel: true}}],xAxis: [{type: 'value'  // X轴现在显示数值}],series: [{name: '直接访问',type: 'bar',barWidth: '60%',data: [10, 52, 200, 334, 390, 330, 220],itemStyle: {normal: {color: function(params) {var colorList = ['#2eddc1','#FCCE10','#E87C25','#277bbb','#E87fff','#E87fff', 'E87fff'];// 若返回的list长度不足,不足部分自动显示为最后一个颜色return colorList[params.dataIndex]},label: {show: true,position: 'right'  // 标签显示在条形的右侧}}}}]};myEchart4.setOption(option4);var myChart = echarts.init(document.getElementById('echart3'));myChart.title = '坐标轴刻度与标签对齐';option = {// 标题title: {text: '通过题目较多的类型'},color: ['#3398DB'],tooltip: {trigger: 'axis',axisPointer: {            // 坐标轴指示器,坐标轴触发有效type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'}},grid: {left: '3%',right: '3%',top: '18%',  // 调整顶部间距containLabel: true},// 交换X轴和Y轴的定义yAxis: [{type: 'category',  // Y轴现在显示类别data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],axisTick: {alignWithLabel: true}}],xAxis: [{type: 'value'  // X轴现在显示数值}],series: [{name: '直接访问',type: 'bar',barWidth: '60%',data: [10, 52, 200, 334, 390, 330, 220],itemStyle: {normal: {color: function(params) {var colorList = ['#2eddc1','#FCCE10','#E87C25','#277bbb','#E87fff','#E87fff', 'E87fff'];// 若返回的list长度不足,不足部分自动显示为最后一个颜色return colorList[params.dataIndex]},label: {show: true,position: 'right'  // 标签显示在条形的右侧}}}}]};myChart.setOption(option);</script>

6、效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android短信监控技术实现:合法合规的远程采集方案

一年经验的全栈程序员&#xff0c;目前头发健在&#xff0c;但不知道能撑多久。 该项目已成功部署并稳定运行于企业生产环境&#xff0c;如需个性化定制方案&#xff0c;欢迎联系作者进行深度合作。 文章目录 前言 一、页面设计 1.页面显示 2.代码实现 二、具体代码实现 1.添加…

前端跨域问题怎么在后端解决

目录 简单的解决方法&#xff1a; 添加配置类&#xff1a; 为什么会跨域 1. 什么是源 2. URL结构 3. 同源不同源举&#x1f330; 同源例子 不同源例子 4. 浏览器为什么需要同源策略 5. 常规前端请求跨域 简单的解决方法&#xff1a; 添加配置类&#xff1a; packag…

【中间件】brpc_基础_execution_queue

execution_queue 源码 1 简介 execution_queue.h 是 Apache BRPC 中实现 高性能异步任务执行队列 的核心组件&#xff0c;主要用于在用户态线程&#xff08;bthread&#xff09;中实现任务的 异步提交、有序执行和高效调度。 该模块通过解耦任务提交与执行过程&#xff0c;提…

java学习之数据结构:一、数组

主要是对数组所有的东西进行总结&#xff0c;整理 适合小白~ 目录 1.什么是数组 1.1数组定义 1.2数组创建 1&#xff09;静态创建 2&#xff09;动态创建 1.3数组遍历 1&#xff09;for和while遍历 2&#xff09;foreach遍历 2.数组越界问题及解决 2.1数组越界问题 2…

[Survey]SAM2 for Image and Video Segmentation: A Comprehensive Survey

BaseInfo TitleSAM2 for Image and Video Segmentation: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2503.12781Journal/Time2503Author四川大学&#xff0c;北京大学 1. Introduction 图像分割专注于识别单个图像中的目标、边界或纹理&#xff0c;而视频分割则将这…

用Maven定位和解决依赖冲突

用Maven定位和解决依赖冲突 一、依赖冲突的常见表现二、定位冲突依赖的4种方法2.1 使用Maven命令分析依赖树2.2 使用IDE可视化工具2.3 使用Maven Enforcer插件2.4 运行时分析 三、解决依赖冲突的5种方案3.1 排除特定传递依赖3.2 统一指定版本&#xff08;推荐&#xff09;3.3 使…

穿越数据森林与网络迷宫:树与图上动态规划实战指南

在 C 算法的浩瀚宇宙中&#xff0c;树与图就像是神秘的迷宫和茂密的森林&#xff0c;充满了未知与挑战。而动态规划则是我们探索其中的神奇罗盘&#xff0c;帮助我们找到最优路径。今天&#xff0c;就让我们一起深入这片神秘领域&#xff0c;揭开树与图上动态规划的神秘面纱&am…

UDP / TCP 协议

目录 一、前言&#xff1a; 数据封装与分用&#xff1a; 二、网络协议分层模型&#xff1a; 三、UDP / TCP 协议 UDP 协议&#xff1a; 1、UDP 协议段格式&#xff1a; 2、UDP 的特点&#xff1a; TCP 协议&#xff1a; 1、TCP 协议段格式&#xff1a; 2、TCP 协议的十…

Python 实现的运筹优化系统数学建模详解(动态规划模型)

相关代码链接&#xff1a;https://download.csdn.net/download/heikediguoshinib/90713747?spm1001.2014.3001.5503 一、引言 在计算机科学与数学建模的广阔领域中&#xff0c;算法如同精密的齿轮&#xff0c;推动着问题的解决与系统的运行。当面对复杂的优化问题时&…

langfuse本地安装

目录 安装命令项目准备用openai测试 安装命令 本地&#xff08;docker compose&#xff09;&#xff1a;使用 Docker Compose 在你的机器上于 5 分钟内运行 Langfuse。 # 获取最新的 Langfuse 仓库副本 git clone https://github.com/langfuse/langfuse.git cd langfuse# 运行 …

每天学一个 Linux 命令(35):dos2unix

每天学一个 Linux 命令(35):dos2unix 命令简介 dos2unix 是一个用于将 Windows/DOS 格式的文本文件转换为 Unix/Linux 格式的实用工具。它主要处理行尾符的转换(将 CRLF 转换为 LF),同时也能处理编码问题和字符集转换。这个命令在跨平台文件共享、代码迁移和系统管理场…

第6章 Python 基本数据类型详解(int, float, bool, str)细节补充

文章目录 Python 基本数据类型深入解析(int, float, bool, str)一、整型(int)的底层机制二、浮点型(float)的陷阱与解决方案三、布尔型(bool)的底层本质四、字符串(str)的不可变性与优化五、类型间的隐式转换与陷阱六、性能优化与工具总结:关键细节与最佳实践Python…

19. LangChain安全与伦理:如何避免模型“幻觉“与数据泄露?

引言&#xff1a;当AI成为企业"数字员工"时的责任边界 2025年某金融机构因AI客服泄露用户信用卡信息被罚款2300万美元。本文将基于LangChain的安全架构与Deepseek-R1的合规实践&#xff0c;揭示如何构建既强大又安全的AI系统。 一、AI安全风险矩阵 1.1 2025年最新威…

Java快速上手之实验六

1. 编写ItemEventDemo.java&#xff0c;当选中或取消选中单选钮、复选钮和列表框时显示所选的结果。 2&#xff0e;编写GUIExample.java&#xff0c;当选中或取消选中单选钮、复选钮时在标签中显示相应结果。 import javax.swing.*; import java.awt.*; import java.awt.event.…

QT6 源(72):阅读与注释单选框这个类型的按钮 QRadioButton,及各种属性验证,

&#xff08;1&#xff09;按钮间的互斥&#xff1a; &#xff08;2&#xff09;源码来自于头文件 qradiobutton . h &#xff1a; #ifndef QRADIOBUTTON_H #define QRADIOBUTTON_H#include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qabstractbutton.h>…

【算法滑动窗口】 将x减到0的最小操作数

将x减到0的最小操作数 个人总结的八步归纳AI的归纳**8步归纳法&#xff08;极简直白版&#xff09;**1. 问题本质2. 问题特征3. 切入点4. 解决流程5. 每步目标与操作6. 注意事项7. 最终目标8. 整体总结 代码对照&#xff08;逐行解析&#xff09;举个栗子&#x1f330;**一句话…

RISC-V GPU架构研究进展:在深度学习推理场景的可行性验证

一、新型算力架构的突围战 在英伟达CUDA生态主导的GPU市场中&#xff0c;RISC-V架构正以‌开源基因‌和‌模块化设计‌开辟新赛道。当前主流GPU架构面临两大痛点&#xff1a; 指令集封闭性‌&#xff1a;NVIDIA的SASS指令集与AMD的GCN/RDNA架构均采用私有指令编码&#xff0c…

LVGL -滑动条

1 滑动条 LVGL 的滑动条(Slider)是一个非常有用的控件,允许用户通过拖动滑块或点击滑条来选择一个值。 1.1 基本定义 滑动条允许用户在一个预定义的数值范围内选择一个特定的值。它通常由一个轨道(track)和一个滑块(thumb)组成。用户可以通过点击或拖动滑块来调整数值。…

ROS2学习笔记|Python实现订阅消息并朗读的详细步骤

本教程将详细介绍如何使用 ROS 2 实现一个节点订阅另一个节点发布的消息&#xff0c;并将接收到的消息通过 espeakng 库进行朗读的完整流程。以下步骤假设你已经安装好了 ROS 2 环境&#xff08;以 ROS 2 Humble 为例&#xff09;&#xff0c;并熟悉基本的 Linux 操作。 注意&…

WPF封装常用的TCP、串口、Modbus、MQTT、Webapi、PLC通讯工具类

WPF封装常用通讯工具类 下面我将为您封装常用的TCP、串口、Modbus、MQTT、WebAPI和PLC通讯工具类,适用于WPF应用程序开发。 一、TCP通讯工具类 using System; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;public class TcpClientHelper : …