【大前端】ECharts 绘制立体柱状图

立体柱状图分为:

  1. 纯色立体柱状图
  2. 渐变立体柱状图

常用实现方式

纯色立体柱状图

纯色立体柱状图,使用MarkPoint和颜色渐变就实现,如下代码

在这里插入图片描述

import * as echarts from "echarts";var chartDom = document.getElementById("main");
var myChart = echarts.init(chartDom, "dark");
var option;const xAxisData = ['A', 'B', 'C', 'D', 'E'];
const yAxisData = [10, 20, 30, 50, 60];const markPointData = [];const barWidth = 30;const linearColor = {type: 'linear',x: 0,y: 0,x1: 0,y1: 1,colorStops: [{offset: 0,color: '#28A9A2' // 0% 处的颜色},{offset: 0.5,color: '#28A9A2' // 0% 处的颜色},{offset: 0.5,color: '#35FFF4' // 0% 处的颜色},{offset: 1,color: '#35FFF4' // 100% 处的颜色}],global: false // 缺省为 false
};yAxisData.forEach((v, i) => {//添加顶部渐变markPointData.push({xAxis: xAxisData[i],yAxis: v,symbol: 'path://M 0 5 L 15 10 L 30 5 L 15 0 L 0 5 Z', //菱形图标symbolSize: [barWidth, barWidth * 0.5],itemStyle: {color: 'rgba(126, 255, 248,1)'}});// //添加底部渐变markPointData.push({xAxis: xAxisData[i],y: 698,// 到左上角Y轴距离symbol: 'path://M 0 5 L 15 10 L 30 5 L 15 0 L 0 5 Z', //菱形图标symbolSize: [barWidth, barWidth * 0.5],symbolOffset: ['0%', '100%'],itemStyle: {color: linearColor}});
});option = {title: {text: '立体柱状图示例'},tooltip: {},xAxis: {data: xAxisData},yAxis: {},series: [{name: '销量',type: 'bar',data: yAxisData,barWidth: barWidth,markPoint: {data: markPointData,silent: true},itemStyle: {borderRadius: [0, 0, 30, 30],color: linearColor}}]
};option && myChart.setOption(option);

SVG

SVG适用于纯色立体柱状图和渐变立体柱状图

ECharts不能直接使用SVG字符串,须要转化为Base64格式的数据(可以使用网络SVG图片地址)

在这里插入图片描述

import * as echarts from "echarts";var chartDom = document.getElementById("main");
var myChart = echarts.init(chartDom, "dark");
var option;const xAxisData = ["A", "B", "C", "D", "E"];
const yAxisData = [10, 20, 30, 50, 60];const markPointData = [];const barWidth = 30;const svgStr ='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="105" viewBox="0 0 14 105"><defs><linearGradient x1="0.5" y1="0" x2="0.5" y2="1" id="master_svg0_1_6290"><stop offset="0%" stop-color="#28A9A2" stop-opacity="1"/><stop offset="100%" stop-color="#28A9A2" stop-opacity="0"/></linearGradient><linearGradient x1="0.5" y1="0" x2="0.5" y2="1" id="master_svg1_1_6296"><stop offset="0%" stop-color="#35FFF4" stop-opacity="1"/><stop offset="100%" stop-color="#35FFF4" stop-opacity="0"/></linearGradient></defs><g><g><rect x="0" y="0" width="7" height="105" rx="0" fill="url(#master_svg0_1_6290)" fill-opacity="1"/></g><g><rect x="7" y="0" width="7" height="105" rx="0" fill="url(#master_svg1_1_6296)" fill-opacity="1"/></g></g></svg>';
// 转换为Base64格式
const svgDataURL = "data:image/svg+xml;base64," + btoa(svgStr);yAxisData.forEach((v, i) => {//添加顶部渐变markPointData.push({xAxis: xAxisData[i],yAxis: v,symbol: "path://M 0 5 L 15 10 L 30 5 L 15 0 L 0 5 Z", //菱形图标symbolSize: [barWidth, barWidth * 0.5],itemStyle: {color: "rgba(126, 255, 248,1)"}});
});option = {title: {text: "立体柱状图示例"},tooltip: {},xAxis: {data: xAxisData},yAxis: {},series: [{name: "销量",type: "pictorialBar",data: yAxisData,barWidth: barWidth,markPoint: {data: markPointData,silent: true},symbol:`image://${svgDataURL}`,}]
};option && myChart.setOption(option);

2. MarkPoint

MarkPoint 适用于多组图标组合展示

它和SVG不同的是绘制方式不一样,SVG是互联网通用绘制方式,MarkPoint是ECharts特有的绘制方式

在这里插入图片描述

import * as echarts from 'echarts';var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom, 'dark');
var option;const xAxisData = ['A', 'B', 'C', 'D', 'E'];
const yAxisData = [10, 20, 30, 50, 60];const markPointData = [];const barWidth = 30;// 计算柱状图高度
function computedBarHeight(value, params) {// 左上角 到 Y轴 0 刻度的高度,如果x轴是数值轴,则例使用xAxisIndex标记const zeroHeight = myChart.convertToPixel({ yAxisIndex: 0 }, 0);// 左上角到Y轴目标数值的高度,如果x轴是数值轴,则例使用xAxisIndex标记const height = myChart.convertToPixel({ yAxisIndex: 0 }, params.data.yAxis);// 返回柱状图大小,高度等于0刻度距离-目标数值距离的差值return [barWidth / 2, zeroHeight - height];
}yAxisData.forEach((v, i) => {//添加左侧渐变markPointData.push({xAxis: xAxisData[i],yAxis: v,symbol: 'rect',symbolSize: computedBarHeight,symbolOffset: ['-50%', '50%'],itemStyle: {color: {type: 'linear',x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: 'rgba(40, 169, 162,1)'},{offset: 1,color: 'rgba(40, 169, 162,0)'}],global: false}}});//添加右侧渐变markPointData.push({xAxis: xAxisData[i],yAxis: v,symbol: 'rect',symbolSize: computedBarHeight,symbolOffset: ['50%', '50%'],itemStyle: {color: {type: 'linear',x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: 'rgba(53, 255, 244,1)'},{offset: 1,color: 'rgba(53, 255, 244,0)'}],global: false}}});//添加顶部渐变markPointData.push({xAxis: xAxisData[i],yAxis: v,symbol: 'path://M 0 5 L 15 10 L 30 5 L 15 0 L 0 5 Z',//菱形图标symbolSize: [barWidth, barWidth * 0.5],itemStyle: {color: 'rgba(126, 255, 248,1)'}});
});option = {title: {text: '立体柱状图示例'},tooltip: {},xAxis: {data: xAxisData},yAxis: {},series: [{name: '销量',type: 'bar',data: yAxisData,barWidth: barWidth,markPoint: {data: markPointData,silent: true},z: 3,itemStyle: {color: 'rgba(255, 53, 64,0)'}}]
};option && myChart.setOption(option);

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

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

相关文章

AI大模型探索之路-训练篇9:大语言模型Transformer库-Pipeline组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

Android View事件分发面试问题及回答

问题 1: 请简述Android中View的事件分发机制是如何工作的&#xff1f; 答案: 在Android中&#xff0c;事件分发机制主要涉及到三个主要方法&#xff1a;dispatchTouchEvent(), onInterceptTouchEvent(), 和 onTouchEvent(). 当一个触摸事件发生时&#xff0c;首先被Activity的…

展会资讯 | 现场精彩回顾 阿尔泰科技参展2024第23届中国国际(西部)光电产业!

2024第23届中国国际&#xff08;西部&#xff09;光电产业博览会&#xff0c;在成都世纪城新国际会展中心圆满落幕&#xff01;来自各地的光电领域设备及材料厂商汇聚一堂&#xff0c;展示前沿技术及创新成果。 展会现场&#xff0c;来自全国各地的500余家企业就精密光学、信息…

ChatGPT 网络安全秘籍(四)

原文&#xff1a;zh.annas-archive.org/md5/6b2705e0d6d24d8c113752f67b42d7d8 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第八章&#xff1a;事故响应 事故响应是任何网络安全策略的关键组成部分&#xff0c;涉及确定、分析和缓解安全漏洞或攻击。 及时和有效地…

Linux深入学习内核 - 中断与异常(下)

软中断&#xff0c;Tasklet和Work Queue 由内核执行的几个任务之间有一些不是紧急的&#xff0c;他们可以被延缓一段时间&#xff01;把可延迟的中断从中断处理程序中抽出来&#xff0c;有利于使得内核保持较短的响应时间&#xff0c;所以我们现在使用以下面的这些结构&#x…

【C++11】多线程创建/互斥详解

目录 1. 背景2. 线程创建2.1 使用std::thread类来创建线程2.2 使用std::async 函数来创建线程2.3 std::thread和std::async的区别 3. 线程互斥3.1 互斥体std::mutex3.2 互斥体包装器std::lock_guard3.3 条件变量std::condition_variable3.4 原子类型std::atomic 4. 线程控制自己…

JAVA每日面试题(二)

Java 高级面试问题及答案 问题1: 什么是Java内存模型(JMM)&#xff0c;它在多线程编程中扮演什么角色&#xff1f; 答案&#xff1a; Java内存模型&#xff08;JMM&#xff09;是一个抽象的概念&#xff0c;它定义了一组规则&#xff0c;这些规则决定了程序中的变量&#xff…

通用漏洞评估系统CVSS4.0简介

文章目录 什么是CVSS&#xff1f;CVSS 漏洞等级分类历史版本的 CVSS 存在哪些问题&#xff1f;CVSS 4.0改进的“命名法”改进的“基本指标”考虑“OT/IOT”新增的“其他指标”CVSS 4.0存在的问题 Reference: 什么是CVSS&#xff1f; 在信息安全评估领域&#xff0c;CVSS为我们…

2024五一数学建模C题Python代码+结果表数据教学

2024五一数学建模竞赛&#xff08;五一赛&#xff09;C题保姆级分析完整思路代码数据教学 C题 煤矿深部开采冲击地压危险预测 第一问 导入数据 以下仅展示部分&#xff0c;完整版看文末的文章 import numpy as np import pandas as pd import matplotlib.pyplot as plt imp…

基于Springboot的音乐翻唱与分享平台

基于SpringbootVue的音乐翻唱与分享平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 音乐资讯 音乐翻唱 在线听歌 后台登录 后台首页 用户管理 音乐资讯管理…

labview强制转换的一个坑

32位整形强制转换成枚举的结果如何&#xff1f; 你以为的结果是 实际上的结果是 仔细看&#xff0c;枚举的数据类型是U16&#xff0c;"1"的数据类型是U32&#xff0c;所以转换产生了不可预期的结果。所以使用强制转换时一定要保证两个数据类型一致&#xff0c;否则…

Python绝对路径及命令行执行路径的写法收录

Python绝对路径及命令行执行路径的写法 在Python中&#xff0c;以使用字符串来表示绝对路径。为了避免转义字符的问题&#xff0c;可以使用原始字符串&#xff08;raw string&#xff09;来表示路径。 直接r 后面路径是单或反斜杠均可&#xff0c;r让转义字符不起作用&#x…

【JavaEE网络】TCP套接字编程详解:从概念到实现

目录 TCP流套接字编程ServerSocket APISocket APITCP回显客户端服务器 TCP流套接字编程 TCP用的协议比UDP更多&#xff0c;可靠性 提供的api主要有两个类ServerSocket&#xff08;给服务器使用的socket&#xff09;&#xff0c;Socket&#xff08;既会给服务器使用也会给客户…

SQL server 使用教程

1.安装和配置SQL Server&#xff1a; 下载安装包&#xff1a;首先&#xff0c;你需要下载SQL Server的安装包。可以从Microsoft官方网站获取最新版的安装包链接&#xff0c;然后下载适用于你的操作系统的版本。 安装SQL Server&#xff1a;双击运行下载的安装包&#xff0c;按…

CentOS7安装MySQL8.3(最新版)踩坑教程

安装环境说明 项值系统版本CentOS7 &#xff08;具体是7.9&#xff0c;其他7系列版本均可&#xff09;位数X86_64&#xff0c;64位操作系统MySQL版本mysql-8.3.0-1.el7.x86_64.rpm-bundle.tar 实际操作 官网下载安装包 具体操作不记录&#xff0c;相关教程很多。 mkdir /o…

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

QT5制做两个独立窗口

目录 增加第二个窗口 主窗口文件添加一个私有成员为子窗口 定义两个槽函数和 关联按钮和子窗口和主窗口 添加子窗口成员 子窗口处理函数 补充回顾 增加第二个窗口 1、 2、 3 主窗口文件添加一个私有成员为子窗口 在mainwidget.h文件 同时添加两个槽&#xff1b;来处理…

Linux 系统上安装 NVIDIA 驱动程序失败(X server问题)

报错信息&#xff1a; ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at www.nvidia.com. ERROR: …

Docker: 如何不新建容器 修改运行容器的端口

目录 一、修改容器的映射端口 二、解决方案 三、方案 一、修改容器的映射端口 项目需求修改容器的映射端口 二、解决方案 停止需要修改的容器 修改hostconfig.json文件 重启docker 服务 启动修改容器 三、方案 目前正在运行的容器 宿主机的3000 端口 映射 容器…

vue2实现面包屑功能

目录 1. store/index.js 2. router/index.js 3. Header.vue 在Vue 2中实现面包屑导航是一种常见的前端实践,它可以帮助用户了解当前页面在网站结构中的位置,并快速导航到上一级或根目录。以下是使用Vue 2实现面包屑导航的基本步骤: 1. store/index.js state中定义一个面…