react ts 封装3D柱状图,支持渐变

留档,以防忘记

bar3D.tsx

import React, { useEffect, useRef, useState } from 'react';
import * as echarts from 'echarts';
import 'echarts/lib/chart/bar';
import 'echarts/lib/chart/pictorialBar';
import 'echarts/lib/component/grid';
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';
import 'echarts/lib/component/legend';interface IProps {name: string;tooltipUnit?: string;xdata: Array<string>;ydata: Array<number>;xLabelRotate?: number;barWidth?: number;barColor?: {left: {top: string;bottom: string;},right: {top: string;bottom: string;}}barCovers?: {left: string;right: string;}labelShow?: booleanlabelColor?: stringlabelFont?: numberoffsetTop?: number | string
}/**** 3D柱状图,支持柱子上下渐变** @param name string 图表名称* @param tooltipUnit string tooips 中显示的单位* @param xdata string[] x轴数据* @param ydata number[] y轴数据* @param xLabelRotate  number x轴标签旋转角度* @param barWidth number 柱状图宽度* @param barColor object 柱状图颜色* @param barCovers object 柱状图顶部和底部盖子颜色* @param labelShow boolean 是否显示柱状图上方文字* @param labelColor string 柱状图上方文字颜色* @param labelFont number 柱状图上方文字大小* @param offsetTop number | string 柱状图上方文字偏移量** @returns*/const Bar3D = ({name = '安全监管',tooltipUnit = '%',xdata = ['bar1', 'bar2', 'bar3', 'bar4', 'bar5'],ydata = [18, 9, 15, 4],xLabelRotate = 0,barWidth = 25,barColor = {left: {top: '#37F1FD', // 柱子左侧顶部颜色bottom: '#12276F' // 柱子左侧底部颜色},right: {top: '#179DD1', // 柱子右侧底部颜色bottom: '#08154D'// 柱子右侧底部颜色}},barCovers = {left: '#34DFF1', // 柱子顶部和底部左侧盖子颜色right: '#1B5590'// 柱子顶部和底部右侧盖子颜色},labelShow = true,labelColor = '#fff',labelFont = 10,offsetTop = '-5'}: IProps) => {const echartDomRef = useRef<any>();useEffect(() => {setEchart();}, []);const setEchart = () => {const myChart = echarts.init(echartDomRef.current);const topArr: any = []; // 顶部棱盖const bottomArr: any = []; // 底部棱盖const leftArr: any = []; // 左侧柱子const rightArr: any = []; // 右侧柱子ydata.map((item: number, index: number) => {topArr.push({value: item,symbol: 'diamond',symbolOffset: [0, '-50%'],symbolPosition: 'end', // 图形边缘与柱子结束的地方内切symbolSize: [barWidth, barWidth * 0.4], // 根据柱子大小来做调整itemStyle: {normal: {color: {x: 1,y: 0,x2: 0,y2: 0,type: 'linear',global: false,colorStops: [{ offset: 0, color: barCovers.left },{ offset: 1, color: barCovers.right }]}}}});bottomArr.push({value: item,symbol: 'triangle',symbolOffset: [0, barWidth * 0.25],symbolSize: [-barWidth, barWidth * 0.25],symbolRotate: 180,itemStyle: {color: {x: 0,y: 0,x2: 1,y2: 0,type: 'linear',global: false,colorStops: [{ offset: 0, color: barColor.left.bottom },{ offset: 0.5, color: barColor.left.bottom },{ offset: 0.5, color: barColor.right.bottom },{ offset: 1, color: barColor.right.bottom }]}}});leftArr.push({value: item,itemStyle: {color: {x: 0,y: 0,x2: 0,y2: 1,type: 'linear',global: false,colorStops: [{ offset: 0, color: barColor.left.top },{ offset: 1, color: barColor.left.bottom }]}}});rightArr.push({value: item,itemStyle: {color: {x: 0,y: 0,x2: 0,y2: 1,type: 'linear',global: false,colorStops: [{ offset: 0, color: barColor.right.top },{ offset: 1, color: barColor.right.bottom }]}}});});const option = {grid: {left: 15,right: 15,bottom: 10,top: 30,containLabel: true},tooltip: {trigger: 'axis',confine: true,formatter: function (param: any) {let str = '';param.map((el: any, index: number) => {if (el.componentSubType === 'bar') {str = el.seriesName + '<br>' + el.marker + el.name + ':' + el.data.value + '' + tooltipUnit;}});return str;}},xAxis: [{type: 'category',data: xdata,axisTick: {show: false},axisLine: {show: false},splitLine: {show: false},axisLabel: {show: true,color: '#76A5D1',fontSize: 10,fontWeight: 300,rotate: xLabelRotate}}],yAxis: [{type: 'value',axisTick: {show: false},axisLine: {show: false},splitLine: {show: true,lineStyle: {color: '#082745'}},axisLabel: {show: true,color: '#76A5D1',fontSize: 10,fontWeight: 300}}],series: [{type: 'pictorialBar',name: '顶部棱盖',z: 10,data: topArr},{type: 'bar',name: name,barGap: '-50%',// symbol: 'image://' + params.picture, // 图片自己切或者让UI设计切喔symbolOffset: [0, 0],barWidth: barWidth / 2,z: 2,label: {show: labelShow,color: labelColor,fontSize: labelFont,position: 'top',offset: [barWidth / 4, Number(offsetTop)]},data: leftArr,},{type: 'bar',name: name,barGap: '-5%',// symbol: 'image://' + params.picture, // 图片自己切或者让UI设计切喔symbolOffset: [0, 0],barWidth: barWidth / 2,z: 3,data: rightArr},{type: 'pictorialBar',name: '底部棱盖',barGap: '-100%',z: 6,data: bottomArr}]};myChart.setOption(option);};return <div className='w-full h-full' ref={echartDomRef}></div>;
};export default Bar3D;

使用

<Bar3D name='近半年系统攻击统计' xdata={['自然安全', '事故安全', '公共卫生', '社会安全', '其他']} ydata={[100, 200, 300, 400, 900]} barWidth={15} />

效果

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

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

相关文章

Centos7 安装老版本的chrome

查看自己linux是哪个centos版本 使用以下命令&#xff1a; cat /etc/centos-release我这里是centOS 7。然后在安装最新版的google-chrome时&#xff0c;总是会报错显示存在依赖环境的问题&#xff0c;使得无法安装成功chrome。 Package: google-chrome-stable (/google-chro…

使用 Rustup 管理 Rust 版本

文章目录 安装 Rustup配置镜像源安装 Rustup 安装 RustVS Code插件创建项目代码示例 Rust 官网&#xff1a;https://www.rust-lang.org/zh-CN/Crates 包管理&#xff1a;https://crates.io/Rust 程序设计语言&#xff1a;https://kaisery.github.io/trpl-zh-cn/通过例子学 Rust…

如何对低代码平台进行分类?

现在市面上的低代码平台就像雨后春笋一样冒出来&#xff0c;而且源源不绝&#xff0c;但总结下来&#xff0c;大致的也就以下三类。 一、 aPaaS多引擎类&#xff08;有很多成熟引擎、做好东西要一起用&#xff09; 这类产品包括&#xff1a;织信Informat&#xff08;国内&…

使用 Smart-doc 记录 Spring REST API

如果您正在使用 Spring Boot 开发 RESTful API&#xff0c;您希望让其他开发人员尽可能容易地理解和使用您的 API。文档是必不可少的&#xff0c;因为它为将来的更新提供了参考&#xff0c;并帮助其他开发人员与您的 API 集成。很长一段时间以来&#xff0c;记录 REST API 的方…

uni-app上传失败超出文件限制解决方法-分包处理-预加载

分包背景 当你的上传出现一下错误&#xff1a; Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 2089KB exceed max limit 2MB [20240703 10:53:06][wxbf93dfb6cb3eb8af] [1.06.2405010][win32-x64] 说明你主包太大需要处理了&#xff0c;一下两种方法可以…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

SpringCloudAlibaba基础四 微服务调用组件OpenFeign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 …

C语言中的文件操作

1. 为什么使⽤⽂件 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑内存中的&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;要将数据进行持久化的保存&#xff0c;我们可以使用文件。 2. 什么是⽂件 磁盘&#xff08;硬盘&#…

springboot双学位招生管理系统-计算机毕业设计源码93054

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

golang写的自动更新器

文件自动更新器&#xff0c;这个很多端游和软件都有用到的。 golang的rpc通信&#xff0c;是非常好用的一个东西&#xff0c;可以跟调用本地函数一样&#xff0c;调用远程服务端的函数&#xff0c;直接从远程服务端上拉取数据下来&#xff0c;简单便捷。 唯一的遗憾就是&#x…

(九)绘制彩色三角形

前面的学习中并未涉及到颜色&#xff0c;现在打算写一个例子&#xff0c;在顶点着色器和片元着色器中加入颜色&#xff0c;绘制有颜色的三角形。 #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <iostream>void …

【DataSophon】DataSophon1.2.1服务组件开启 kerberos

目录 一、DataSophon是什么 1.1 DataSophon概述 1.2 架构概览 1.3 设计思想 二、集成组件 三、环境准备 四、安装kerberos服务 4.1 Zookeeper 4.2 HDFS 4.3 HBase 4.4 YARN 4.5 hive 【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程-CSDN博客 【Da…

NAT地址转换实验,实验超简单

实验拓扑 实验目的 将内网区域&#xff08;灰色区域&#xff09;的地址转换为172.16.1.0 实验过程 配置静态NAT&#xff08;基于接口的静态NAT&#xff09; R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname R1 [R1]un in en I…

从传统仓储到智能WMS:物流管理的变革

在现代经济中&#xff0c;物流管理是企业运营的关键组成部分。随着全球化和电子商务的迅猛发展&#xff0c;仓储管理的重要性愈发突出。传统的仓储管理方式已经无法满足高效、精确和快速响应的需求。为了应对这一挑战&#xff0c;智能仓储管理系统&#xff08;WMS, Warehouse M…

微软关闭中国所有线下店,并不影响全球第一

​关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 微软没有被时代淘汰&#xff0c;时代也没有告别微软!中国市场对微软可有可无&#xff0c;即便没有中国市场&#xff0c;微软市值也在全球前三&#xff0c;这是事实!a 5月中旬&#xff0c;微软azure解散中国分部…

Linux 搭建 Kafka 环境 - 详细教程

目录 一. Kafka介绍 1. 应用场景 2. 版本对比 二. Kafka安装 1. 前置环境 &#xff08;1&#xff09;安装JDK 2. 软件安装 &#xff08;3&#xff09;环境变量配置 &#xff08;3&#xff09;服务启动 三. Console测试 基础命令 &#xff08;1&#xff09;列出Kafk…

最近,被“AI”狠狠刷屏了......

最近&#xff0c;被“AI”狠狠刷屏了。 作为时下最热门的话题&#xff0c;AI画图、AI配音、AI写文案、AI做视频......AI在最近两年可谓是火遍全球。ChatGPT、Midjourney和SORA等技术不断涌现&#xff0c;不仅深刻改变着我们的生活方式&#xff0c;也推动了AI技术的飞速发展。 …

白杨SEO:打粉是啥?打粉引流怎么做?打粉引流犯法吗?小红书代发效果好吗?

文章大纲&#xff1a; 1、打粉是什么意思&#xff1f; 2、打粉有哪些方法&#xff1f; 3、打粉一般怎么变现&#xff1f; 4、打粉引流是违法犯罪吗&#xff1f; 5、小红书代发是啥&#xff1f; 6、小红书批量代发效果好吗&#xff1f; 打粉是什么意思&#xff1f; 打粉这…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

计算机网络 | 期末复习

物理层&#xff1a; 奈氏准则&#xff1a;带宽&#xff08;w Hz&#xff09;&#xff0c;在不考虑噪音的情况下&#xff0c;最大速率&#xff08;2W&#xff09;码元/秒 信噪比S/N&#xff1a;以分贝&#xff08;dB&#xff09;为度量单位。信噪比&#xff08;dB&#xff09;…