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

Echarts使用平面方法绘制三维立体柱状图表

目录

一、准备工作

1.下载引入ECharts库

2.创建容器

二、绘制基本柱状

三、绘制立体柱状方法一

1.定义立方体形状

2.注册立方体形状

3.配置custom系列

4.设置数据

5.渲染图表

四、绘制立体柱状方法二

1.画前知识

2.计算坐标renderItem 函数

(1)type: "custom"

(2)renderItem 函数

(3)坐标转换

(4)自定义图形

(5)多边形polygon

(6)绘制点形成图形


一、准备工作

1.下载引入ECharts库

npm install echarts

import * as echarts from "echarts";

2.创建容器

在HTML中创建一个用于容纳图表的容器,例如一个div元素。

<div id="barchart"></div>

二、绘制基本柱状

绘制基本柱状图,样式修改成想要的。

xAxis 对象定义了 X 轴的配置,包括轴标签(axisLabel)、轴线(axisLine)、轴刻度(axisTick)等。这里设置了标签颜色、标签旋转角度、轴线颜色,并隐藏了轴刻度。

yAxis 对象定义了 Y 轴的配置,与 X 轴类似,包括轴标签、轴线、轴刻度以及分割线(splitLine)的配置。

直接上代码:

mounted() {this.getbarchart();
},  
 getbarchart() {let barchartDom = document.getElementById("barchart");this.barchart = echarts.init(barchartDom);let option = {color: ["#3398DB"],xAxis: {data: ["两卡人员","前科人员","地方摸排","机场拦截","边境拦截","限制出境","缅北人员"],axisLabel: {color: "#8CBAEE",rotate: -60},axisLine: {lineStyle: {color: "#8CBAEE"}},axisTick: {show: false}},yAxis: {axisLabel: {color: "#8CBAEE"},axisLine: {lineStyle: {color: "#8CBAEE"}},axisTick: {show: false},splitLine: {lineStyle: {color: "#0B0842"}}},// 基础柱状图series: [{type: 'bar',// type: 'custom',barWidth: "30%",data: [120, 100, 199, 311, 400, 238, 140],itemStyle: {// 设置渐变色color: new echarts.graphic.LinearGradient(0, 0, 0, 1,[{ offset: 0, color: '#387BFE' },{ offset: 1, color: '#7CB1FD' }])},},]};option && this.barchart.setOption(option);},

三、绘制立体柱状方法一

使用echarts.graphic.extendShape|registerShape大概步骤如下:

1.定义立方体形状

使用echarts.graphic.extendShape方法来定义一个新的立方体形状。在这个方法中,传入一个对象,该对象包含shape属性和buildPath方法。shape属性用于定义立方体的形状属性(如坐标、大小等),而buildPath方法则用于定义绘制立方体路径的逻辑。

2.注册立方体形状

使用echarts.graphic.registerShape方法来注册你定义的立方体形状,就可以在custom系列中使用这个形状了。

3.配置custom系列

在ECharts的配置项中,添加一个custom系列的配置。在renderItem函数中,你可以使用你注册的立方体形状来绘制每个数据项对应的立方体。

4.设置数据

custom系列设置数据,每个数据项将对应一个立方体。

5.渲染图表

调用ECharts实例的setOption方法来应用配置,并渲染图表。

我觉得这位大大写的很nice,可参考博客:03-echarts如何画立体柱状图_echarts立体柱状图-CSDN博客

四、绘制立体柱状方法二

自定义type: "custom"及多边形polygon

1.画前知识

可查看博客第二部分:03-echarts如何画立体柱状图_echarts立体柱状图-CSDN博客

2.计算坐标renderItem 函数

(1)type: "custom"

因为我们要自定义形状,所以用type: 'bar'已不合适,用custom自定义系列

(2)renderItem 函数

renderItem 是一个函数,它接收两个参数:params 和 api

params: 通常包含当前渲染的数据项的信息,但在自定义系列中,它的使用可能不频繁。

api: 提供了一系列的方法和属性,用于访问当前数据点的信息、坐标转换、绘制图形等。

(3)坐标转换

使用api.coord方法将当前数据点的数值坐标转换为屏幕坐标

api.value(0)通常是X轴的值

api.value(1)是Y轴的值

api.coord([api.value(0), 0])[1]; 获取Y轴为0时的屏幕坐标(即X轴上的点),用于绘制图形的底部。

(4)自定义图形

返回一个对象,指定了要渲染的图形类型type: "group"和子元素childrentype: "group": 表示这是一个图形组,可以包含多个子图形。children: 是一个数组,包含了要渲染的子图形多边形polygon

(5)多边形polygon

type: "polygon": 指定这是一个多边形。

shape: 定义了多边形的形状,通过points数组给出多边形的顶点坐标。顶点坐标是通过之前计算的屏幕坐标加减一些偏移量来确定的。

style: 定义了多边形的样式。fill: 使用线性渐变填充多边形。new echarts.graphic.LinearGradient(...)创建了一个线性渐变对象,指定了渐变的方向、起始颜色和结束颜色。

(6)绘制点形成图形

左侧:

左上点: [基础X轴坐标点-侧面宽度,顶部Y轴坐标点-斜角高度]

左下点:[基础X轴坐标点-侧面宽度,底部Y轴坐标点]

右下点:[基础X轴坐标点,底部Y轴坐标点]

右下点:[基础X轴坐标点,顶部Y轴坐标点]

右侧:

左上点: [基础X轴坐标点,顶部Y轴坐标点]

左下点:[基础X轴坐标点,底部Y轴坐标点]

右下点:[基础X轴坐标点 +侧面宽度 ,底部Y轴坐标点]

右下点:[基础X轴坐标点 +侧面宽度,顶部Y轴坐标点 - 斜角高度]

顶部菱形:

中下点: [基础X轴坐标点,顶部Y轴坐标点]

右点:[基础X轴坐标点+侧面宽度,顶部Y轴坐标点- 斜角高度]

中上点:[基础X轴坐标点 ,顶部Y轴坐标点- 斜角高度*2]

左点:[基础X轴坐标点 -侧面宽度,顶部Y轴坐标点 - 斜角高度]

完成代码如下:

        getbarchart() {let barchartDom = document.getElementById("barchart");this.barchart = echarts.init(barchartDom);let option = {color: ["#3398DB"],xAxis: {data: ["两卡人员","前科人员","地方摸排","机场拦截","边境拦截","缅北人员"],axisLabel: {color: "#8CBAEE",rotate: -60},axisLine: {lineStyle: {color: "#8CBAEE"}},axisTick: {show: false}},yAxis: {axisLabel: {color: "#8CBAEE"},axisLine: {lineStyle: {color: "#8CBAEE"}},axisTick: {show: false},splitLine: {lineStyle: {color: "#0B0842"}}},// 立方体柱状series: [{type: "custom",data: [120, 24, 90, 311, 400, 238, 100],renderItem: (params, api) => {const basicsCoord = api.coord([api.value(0), api.value(1)]);const topBasicsYAxis = basicsCoord[1];const basicsXAxis = basicsCoord[0];const bottomYAxis = api.coord([api.value(0), 0])[1];return {type: "group",children: [// 左侧{type: "polygon",shape: { points: [[basicsXAxis-10, topBasicsYAxis-4], [basicsXAxis-10, bottomYAxis], [basicsXAxis, bottomYAxis], [basicsXAxis, topBasicsYAxis]]},style: { fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#387BFE' },{ offset: 1, color: '#7CB1FD' }])}},// 右侧{type: "polygon",shape: {points: [[basicsXAxis, topBasicsYAxis],[basicsXAxis, bottomYAxis],[basicsXAxis+10, bottomYAxis],[basicsXAxis+10, topBasicsYAxis-4]]},style: {fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#387BFE' },{ offset: 1, color: '#7CB1FD' }])}},// 顶部{type: "polygon",shape: {points: [[basicsXAxis, topBasicsYAxis],[basicsXAxis-10, topBasicsYAxis - 4],[basicsXAxis, topBasicsYAxis - 8],[basicsXAxis+10, topBasicsYAxis - 4]]},style: {fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#387BFE' },{ offset: 1, color: '#7CB1FD' }])}}]};}}]};option && this.barchart.setOption(option);},

若文章对你有帮助,点个赞吧!

相关文章:

Echarts使用平面方法绘制三维立体柱状图表

目录 一、准备工作 1.下载引入ECharts库 2.创建容器 二、绘制基本柱状 三、绘制立体柱状方法一 1.定义立方体形状 2.注册立方体形状 3.配置custom系列 4.设置数据 5.渲染图表 四、绘制立体柱状方法二 1.画前知识 2.计算坐标renderItem 函数 &#xff08;1&#x…...

java-判断语句

题目一&#xff1a;选择练习1 657. 选择练习1 - AcWing题库 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a sc.nextInt(), b sc.nextInt();int c sc.nextInt(), d sc.nextInt();…...

11.14【JAVA EXP3】【DEBUG】

比较疑惑的一点是当前页面&#xff08;资源的url)与请求的url? 请求的url由webService接收&#xff0c;servelt当中也可以发送出这个url 进行页面跳转&#xff0c;是跳转到某个Jsp页面&#xff0c;这个页面的url是在哪里定义的&#xff1f; 在Jsp打印信息&#xff0c;这个报…...

UE5 和 UE4 中常用的控制台命令总结

调用控制台 按下键盘上的 ~ 键可以调用控制台命令。 技巧 使用键盘的 ↑ 键可以查看之前输入过的指令。控制台指令并不需要打全名&#xff0c;输入空格后跟随指令的部分字符可以进行模糊搜索。按下 Ctrl Shift , 打开 GPUProfile 面板。 命令如下&#xff1a; 调试类 s…...

MR30分布式IO模块赋能喷水织机

纺织行业作为我国传统支柱产业&#xff0c;历经数千年的演变&#xff0c;如今仍面临着诸多困境&#xff0c;在纺织行业中&#xff0c;每一次技术的飞跃都是对行业边界的勇敢探索。在纺织行业&#xff0c;喷水织机作为关键生产设备&#xff0c;其性能直接影响到产品质量和产能。…...

C++中的封装性

定义&#xff1a; 封装性&#xff1a; 1.将属性&#xff08;成员变量&#xff09;和行为&#xff08;成员函数&#xff09;作为一个整体&#xff0c;表现在生活中的事物 2.将属性和行为加以权限控制 &#xff08;将事物的属性&#xff08;成员变量&#xff09;和行为&#…...

PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具

PyTorch 深度学习框架简介&#xff1a;灵活、高效的 AI 开发工具 PyTorch 作为一个深度学习框架&#xff0c;以其灵活性、可扩展性和高效性广受欢迎。无论是在研究领域进行创新实验&#xff0c;还是在工业界构建生产级的深度学习模型&#xff0c;PyTorch 都能提供所需的工具和…...

leetcode-22.括号生成

暴力 感谢分享这个思路和算法。生成括号的问题可以通过生成所有可能的括号序列并验证其有效性来解决。以下是对该思路的详细解释和实现&#xff1a; 思路 生成所有可能的序列&#xff1a; 使用递归生成所有长度为 2n 的括号序列。在每个位置可以选择放置 ( 或 )。 验证序列的…...

devops-Dockerfile+Jenkinsfile方式部署Java前后端应用

文章目录 概述部署前端Vue应用一、环境准备1、Dockerfile2、.dockerignore3、nginx.conf4、Jenkinsfile 二、Jenkins部署1、新建任务2、流水线3、Build Now 构建 & 访问 Springboot后端应用1. 准备工作2. 创建项目结构3. 编写 Dockerfile后端 Dockerfile (backend/Dockerfi…...

【Apache Paimon】-- 4 -- Flink 消费 kafka 数据,然后写入 paimon

目录 1、本地开发环境 2、kafka2paimon 实现流程 3、代码实现 3.1、项目名称 3.2、项目结构 3.3、Pom.xml 和 log4j.properties 文件 3.4、代码核心类 3.4.1、入口类:Kafka2PaimonDemo.java 3.4.2、参数解析类 3.4.2.1、JobParameterUtil.java( flink job schedule…...

【成功解决】:VS2019(Visual Studio 2019)遇到E2870问题:此配置中不支持 128 位浮点类型

起因:项目中需要用json来操作数据,就引了cJSON库(cJSON.h和cJSON.c文件),但是发现编译报错如下 E2870 此配置中不支持 128 位浮点类型 test0 ...\usr\include\x86_64-linux-gnu\bits\floatn.h 75 然后先新建了个工程来检查问题(甚至在这之前还以为是cjson…...

什么是TCP的三次握手?

TCP的三次握手&#xff1a;深入理解建立可靠连接的过程 引言 在计算机网络中&#xff0c;传输控制协议&#xff08;TCP&#xff09;是确保数据可靠传输的核心协议之一。TCP通过三次握手机制来建立一个稳定的、双向的连接&#xff0c;这对于确保数据的完整性和顺序至关重要。本…...

SQL教程(2):SQL基础语法及用途

在上一篇文章中&#xff0c;我们介绍了 SQL&#xff08;结构化查询语言&#xff09;的基本概念&#xff0c;以及它在用户研究中的重要作用。今天&#xff0c;我们将深入了解 SQL 的基本语法&#xff0c;并通过实际应用场景帮助你更好地理解如何使用 SQL 提取和分析数据。对于刚…...

在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(待续)

在使用实体ESP32C3 安装鸿蒙失败后&#xff0c;就是这个&#xff1a;完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32&#xff08;主要是想针对ESP32C3和S3&#xff09;开发板的鸿蒙系统(失败)-CSDN博客转向用qemu模拟环境装鸿蒙 学习手册riscv32_virt/README_zh.md OpenHar…...

C++:基本-union是没有构造函数和析构函数的

今天发现当我在union中包含了多个结构体时&#xff0c;结构体有默认构造函数时&#xff0c;编译报错。 问题点&#xff1a; union不支持构造函数和析构函数union中的元素本身也是不支持构造函数和析构函数的。包含union的结构体也不支持构造函数和析构函数。 出错代码如下&a…...

报错 JSON.parse: expected property name or ‘}‘,JSON数据中对象的key值不为字符串

报错 JSON.parse: expected property name or ‘}’ 原因 多是因为数据转换时出错&#xff0c;可能是存在单引号或者对象key值不为string导致 这里记录下我遇见的问题&#xff08;后端给的JSON数据里&#xff0c;对象key值不为string&#xff09; 现在后端转换JSON数据大多…...

LeetCode 热题 100_旋转图像(20_48_中等_C++)(原地旋转;翻转)

LeetCode 热题 100_旋转图像&#xff08;20_48&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;原地旋转&#xff09;&#xff1a;思路二&#xff08;翻转&#xff09;&#xff1a; 代码实现&#xff08;思路…...

mysql查询所有用户及删除用户

查询用户 select user, host, password_expired from mysql.user;删除用户 DROP USER [username]localhost &#xff1b;刷新权限 FLUSH PRIVILEGES&#xff1b;查询所有用户/账号设置/日志/开启日志 select user,host,password_expired,password_last_changed,password_li…...

Vue 鼠标滚轮缩放图片的实现

wheel"handleZoom" 监听鼠标滚轮事件 event.deltaY < 0 代表向上滚动 event.deltaY > 0 代表向下滚动 使用computed处理scale比例的变化 const imageStyle computed(() > ({ transform: translate(-50%, -50%…...

全景图 与 6面图转换

目录 全景图转6面图&#xff1a; 6面图转全景图 全景图转6面图&#xff1a; https://github.com/springcheese/panoramic_to_cubemap_generation # Necessary Imports import math import argparse import numpy as np from PIL import Image# Dictionary for CUBEMAP FACES…...

YOLOv8.yaml文件配置详解:从参数解析到模型结构优化实战

YOLOv8.yaml文件配置详解&#xff1a;从参数解析到模型结构优化实战 在计算机视觉领域&#xff0c;目标检测一直是核心任务之一。YOLO(You Only Look Once)系列算法因其出色的实时性和准确性广受欢迎&#xff0c;而YOLOv8作为该系列的最新版本&#xff0c;在模型结构和参数配置…...

本地部署openclaw(window环境下)不用花钱买token版

步骤一&#xff1a;参考视频到安装 openclaw 前就行&#xff08;剩下的步骤和博主不太样&#xff09; 步骤 2 1、免费注册一个 NVIDIA NIM 账户&#xff1a; 【点击前往】 登入后在设置中心生成你自己的API Keys &#xff0c;过期时间选择永不过期&#xff0c;目前可以直接免…...

Win11虚拟内存配置全解析:从临时页面文件到永久解决方案(含DISM命令详解)

Win11虚拟内存深度优化指南&#xff1a;从原理到实战的完整解决方案 每次开机看到那个烦人的"页面文件配置问题"提示&#xff0c;是不是让你感到困惑又无奈&#xff1f;作为Windows系统内存管理的关键组件&#xff0c;虚拟内存的配置直接影响着系统性能和稳定性。本文…...

还在用老方法显示数据?手把手教你用MFC的CListCtrl打造一个带图标的学生信息查询系统

实战MFC&#xff1a;用CListCtrl构建可视化学生管理系统 在桌面应用开发领域&#xff0c;数据展示一直是用户体验的核心环节。传统的表格控件虽然能完成基本功能&#xff0c;但缺乏视觉层次和交互灵活性。MFC中的CListCtrl控件提供了四种视图模式&#xff0c;特别适合需要同时呈…...

基于Pixel Epic · Wisdom Terminal的MySQL智能运维:安装配置与性能调优

基于Pixel Epic Wisdom Terminal的MySQL智能运维&#xff1a;安装配置与性能调优 1. 引言 MySQL作为最流行的开源关系型数据库&#xff0c;在各类业务系统中扮演着核心角色。但传统的数据库运维往往面临几个痛点&#xff1a;配置参数复杂难懂、SQL优化依赖经验、性能问题排查…...

Python中CSV文件处理的常见累积错误及修正方案

在使用 Python 的 csv 模块处理学生成绩数据时&#xff0c;一个极易被忽视却影响结果准确性的典型问题是变量作用域与重用逻辑错误。如原始代码所示&#xff0c;grades [] 被定义在 for row in reader: 循环外部&#xff0c;导致每次迭代都将新学生的成绩追加到同一个列表中—…...

seo页面优化公司如何进行网站内容优化

SEO页面优化公司如何进行网站内容优化 在当今数字化时代&#xff0c;网站内容优化已经成为了每个企业在SEO&#xff08;搜索引擎优化&#xff09;中的关键步骤。SEO页面优化公司通过一系列策略和技术&#xff0c;帮助企业提高网站在搜索引擎中的排名&#xff0c;从而吸引更多的…...

STM32CubeIDE工程复制粘贴保姆级教程:告别重复配置,5分钟搞定新项目

STM32CubeIDE工程复制粘贴保姆级教程&#xff1a;告别重复配置&#xff0c;5分钟搞定新项目 每次启动新项目时&#xff0c;你是否还在重复那些繁琐的初始化步骤&#xff1f;从零开始配置时钟树、外设参数、中断优先级&#xff0c;不仅耗时费力&#xff0c;还容易出错。对于经验…...

VISA 标准深度剖析:寄存器基控制规范与函数接口研究

VISA 标准深度剖析:寄存器基控制规范与函数接口研究 VISA(Virtual Instrument Software Architecture)是仪器控制领域的标准 API,它为不同总线(GPIB、USB、LAN、PXI 等)提供了统一的编程接口。本文将 VISA 函数按功能分为 8 大类,并逐一解析其作用、核心函数及使用场景…...

别再手动调时间了!手把手教你用LinuxPTP的ptp4l和phc2sys搞定TSN网络时钟同步

工业TSN网络高精度时钟同步实战&#xff1a;从原理到生产环境部署 在工业自动化、智能驾驶和实时音视频传输领域&#xff0c;微秒级的时间同步已成为刚需。传统NTP协议毫秒级的精度在这些场景下显得力不从心&#xff0c;而基于IEEE 1588和802.1AS协议的PTP&#xff08;精确时间…...