[echarts]横向柱状图

前言

接到一个需求,需要展示一个横向的柱状图,按数量从大到小排序,并定时刷新
使用react配合echarts进行实现。

react引入echarts

import React, { useEffect, useRef } from 'react';
import * as echarts from 'echarts';
import DeviceApi from '@/api/screen/DeviceApi';const CenterRank = (props) => {const chartRef = useRef(null);const initEcharts = () => {if (chartRef.current) {const chart = echarts.init(chartRef.current);const option = {legend: {show: true},grid: {  //控制图形大小top: '12%',left: '3%',right: '8%',bottom: '3%',containLabel: true},xAxis: {max: 'dataMax',type: 'value',boundaryGap: [0, 0.01],axisLine: {show: false},axisTick: {show: false},splitLine: {show: false},axisLabel: {show: false}},yAxis: [{type: 'category',data: [],inverse: true,animationDuration: 0,animationDurationUpdate: 500,axisLabel: {show: true,inside: true,interval: 0,splitNumber: 50,textStyle: {color: '#9FFFFD',verticalAlign: 'bottom',fontSize: '0.8rem',align: 'left',padding: [0, 0, 8, -5]   //y轴在柱子上方},formatter: function (value) {const top = value.split(' ')[0];const center = value.split(' ')[1];if (value.startsWith("Top1") || value.startsWith("Top2") || value.startsWith("Top3")) {return '{' + top + '|' + top + '}' + ' {center|' + center + '}';} else {return '{other|' + top + '}' + ' {center|' + center + '}';}},rich: {  //富文本样式,配置Top1 2 3的不同样式Top1: {padding: 2,color: '#FA5151',backgroundColor: 'rgba(250,81,81,0.24)',},Top2: {padding: 2,color: '#FF8F1F',backgroundColor: 'rgba(255,143,31,0.24)',},Top3: {padding: 2,color: '#FFC300',backgroundColor: 'rgba(255,195,0,0.24)',},other: {padding: 2,color: '#9FFFFD',backgroundColor: 'rgba(159,255,253,0.24)',},}},axisLine: {show: false},axisTick: {show: false},splitLine: {show: false}},{  //配两个y轴,可以做出label在柱子末端展示的效果type: 'category',position: 'top',data: [],axisLabel: {show: true,color: '#fff',formatter: (value, index) => {return `${value}h`;},},axisLine: {show: false},axisTick: {show: false},},],series: [{realtimeSort: true,type: 'bar',data: [],label: {show: false,position: 'right',valueAnimation: true,formatter: '{c}h',fontSize: '0.8rem',color: '#fff'},barWidth: 6,   // 条形的宽度itemStyle: {borderRadius: 0,color: function (params) {  // 设置颜色为线性渐变return new echarts.graphic.LinearGradient(1, 0, 0, 0,[{ offset: 0, color: '#2FFFFD' },{ offset: 1, color: 'rgba(47,255,253,0)' }],false);},},showBackground: true,  //柱子的背景色backgroundStyle: {color: 'rgba(159,255,253,0.3)'}}],animationDuration: 3000,animationDurationUpdate: 5000,animationEasing: 'linear',animationEasingUpdate: 'linear'};chart.setOption(option);const fetchData = async () => {try {const response = await DeviceApi.getUsageRank();response.sort((a, b) => b.occupyTime - a.occupyTime)  //根据occupyTime进行排序const data = { labels: response.map(item => item.orgName), values: response.map(item => item.occupyTime) }data.labels = data.labels.map((item, index) => {return `Top${index + 1} ${item}`})chart.setOption({yAxis: [{data: data.labels},{data: response.map(item => item.occupyTime).reverse()}],series: [{data: data.values}]});} catch (error) {console.error('Error fetching data:', error);}}fetchData();const intervalId = setInterval(fetchData, 60 * 60 * 1000);  //1小时刷新一次window.addEventListener('resize', chart.resize);return () => {window.removeEventListener('resize', chart.resize);clearInterval(intervalId);chart.dispose();};}};useEffect(() => {initEcharts();}, []);return (<div title="使用时长排名"><div ref={chartRef} style={{ height: '100%', width: '100%' }} /></div>)
}export default CenterRank;

最终效果

在这里插入图片描述

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

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

相关文章

【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务

​​引言​​ 如果你经常被 Docker 镜像拉取、GitHub 文件下载的龟速折磨&#xff0c;又不想依赖第三方加速服务&#xff08;担心稳定性或隐私&#xff09;&#xff0c;今天分享的 ​​HubProxy​​ 可能正是你需要的。这个开源工具用一行命令就能部署&#xff0c;以极低资源消…

java web jsp jstl练习

JSP 的学习。 核心功能模块 1. 源代码层 &#xff08; src &#xff09; HelloWorld &#xff1a;主程序入口领域模型 &#xff1a; domain 包含User.java和ceshi.java控制器 &#xff1a; servlet 包含登录验证和验证码相关ServletWeb表现层 &#xff08; web &#xff09; JS…

VSCode 完全指南:释放你的编码潜能

零、简介 在当今的软件开发领域&#xff0c;代码编辑器的选择至关重要&#xff0c;它就像是工匠手中的工具&#xff0c;直接影响着工作效率和成果质量。Visual Studio Code&#xff08;简称 VSCode&#xff09;自问世以来&#xff0c;迅速在全球开发者社区中崭露头角&#xff…

《n8n基础教学》第一节:如何使用编辑器UI界面

在本课中&#xff0c;你将学习如何操作编辑器界面。我们将浏览画布&#xff0c;向您展示每个图标的含义&#xff0c;以及在 n8n 中构建工作流程时在哪里可以找到您需要的东西。本课程基于 n8n 最新版本 。在其他版本中&#xff0c;某些用户界面可能有所不同&#xff0c;但这不会…

gcc g++ makefile CMakeLists.txt cmake make 的关系

gcc&#xff1a;C语言编译器g&#xff1a;C编译器makefile&#xff1a;定义编译规则、依赖关系和构建目标。可以手动编写&#xff0c;也可以由CMakeLists.txt生成cmake&#xff1a;读取CMakeLists.txt文件&#xff0c;生成Makefilemake&#xff1a;构建工具&#xff0c;执行Mak…

SFT 训练器

SFT 训练器 “训练时间到!” 我们现在终于可以创建一个监督微调训练器的实例了: trainer = SFTTrainer( model=model, processing_class=tokenizer, args=sft_config, train_dataset=dataset, )SFTTrainer 已经对数据集进行了预处理,因此我们可以深入查看,了解每个小批次…

Android Material Components 全面解析:打造现代化 Material Design 应用

引言 在当今移动应用开发领域&#xff0c;用户体验(UX)已成为决定应用成功与否的关键因素之一。Google推出的Material Design设计语言为开发者提供了一套完整的视觉、交互和动效规范&#xff0c;而Material Components for Android(MDC-Android)则是将这些设计理念转化为可重用…

Windows使用Powershell自动安装SqlServer2025服务器与SSMS管理工具

安装结果: 安装前准备: 1.下载mssql server 2025安装器 2.下载iso镜像 3.下载好SSMS安装程序,并放到iso同目录下 4.执行脚本开始自动安装

09 RK3568 Debian11 ES8388 模拟音频输出

1、设备树配置 确认自己的i2c,使用sdk带的驱动es8323 /SDK/kernel/sound/soc/codecs/es8323.c es8388_sound: es8388-sound {status = "okay";compatible = "rockchip,multicodecs-card"; rockchip,card-name = "rockchip,es8388-codec"; …

力扣-199.二叉树的右视图

题目链接 199.二叉树的右视图 class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res new ArrayList<>();Queue<TreeNode> queue new LinkedList<>();if (root null)return res;queue.offer(root);while …

Android Bitmap 完全指南:从基础到高级优化

在 Android 开发中&#xff0c;图像处理是一个核心且复杂的领域&#xff0c;而 Bitmap 作为 Android 中表示图像的基本单位&#xff0c;贯穿了从简单图片显示到复杂图像编辑的各个场景。然而&#xff0c;Bitmap 处理不当往往会导致应用性能下降、内存溢出&#xff08;OOM&#…

unity日志过滤器

背景&#xff1a;之前做游戏的时候和同组的同事聊过说日志过滤尽量不要限制大家怎么使用日志打印的接口&#xff0c;不要加额外的参数&#xff0c;比如多加一个标签string,或者使用特定的接口&#xff0c;枚举。最好就是日志大家还是用Debug.Log无感去用&#xff0c;然后通过勾…

OpenGL Camera

一. lookAt函数的参数含义glm::mat4 view glm::lookAt(cameraPos, // 相机在世界坐标系中的位置&#xff08;任意值&#xff09;cameraPos cameraFront, // 相机看向的目标点&#xff08;位置朝向&#xff09;cameraUp // 相机的"上方向"&#xff08;通…

Android RTMP推送|轻量级RTSP服务同屏实践:屏幕+音频+录像全链路落地方案

一、背景&#xff1a;从“移动终端”到“远程协作节点”&#xff0c;同屏音频录像为何成刚需&#xff1f; 在数字化办公、智慧医疗与远程教育等快速发展的推动下&#xff0c;手机作为随身终端&#xff0c;已不再只是“内容接收者”&#xff0c;而逐步成为远程信息发布与可视化…

NLP 和 LLM 区别、对比 和关系

理解自然语言处理(NLP)和大语言模型(LLM)的区别、对比和关系对于把握现代人工智能的发展非常重要。以下是清晰的分析: 核心定义 NLP (Natural Language Processing - 自然语言处理): 是什么: 一个广阔的计算机科学和人工智能子领域,致力于让计算机能够理解、解释、操作…

Altium 移除在原理图之外的元器件

Altium新手&#xff0c;最近在画原理图的时候&#xff0c;遇见了这种不小心拖到界面外的元器件&#xff0c;发现拖不回来了了&#xff0c;查阅了一下&#xff0c;总结在这里 官方推荐的方法----------------使用“SCH List”面板删除 链接&#xff1a;如何移除在原理图之外的元…

【Linux我做主】细说环境变量

Linux环境变量Linux环境变量github地址前言1. 基本概念环境变量的本质2. 认识常见的环境变量PATH查看PATH修改PATHHOMESHELL其他常见环境变量PWD与OLDPWDLOGNAME与USERSSH_TTY由环境变量理解权限使用系统调用获取环境变量理解权限3. 总结什么是环境变量3. 命令行参数和环境变量…

leecode-15 三数之和

我的解法&#xff08;不是完全解309/314&#xff09;我的思路是定义一个left和一个right&#xff0c;然后在向集合里去查询&#xff0c;看看有没有除了nums[left]&#xff0c;和nums[right]的第三个元素&#xff0c;把这个问题转换为一个遍历查找问题 利用List.contains()方法来…

精通分类:解析Scikit-learn中的KNN、朴素贝叶斯与决策树(含随机森林)

在机器学习领域&#xff0c;分类任务占据核心地位。Scikit-learn作为Python的机器学习利器&#xff0c;提供了丰富高效的分类算法。现在进行初步探讨三种经典算法&#xff1a;K最近邻&#xff08;KNN&#xff09;、朴素贝叶斯&#xff08;Naive Bayes&#xff09;和决策树&…

Galaxea机器人由星海图人工智能科技有限公司研发的高性能仿人形机器人

Galaxea机器人是由星海图人工智能科技有限公司研发的高性能仿人形机器人&#xff0c;具有多种型号&#xff0c;包括Galaxea R1和Galaxea R1 Pro。以下是关于Galaxea机器人的详细介绍&#xff1a; GitHub官网 产品特点 高自由度设计&#xff1a;Galaxea R1是一款全尺寸仿人型机…