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

04-echarts-立体柱状图扩展

柱状图扩展

  • 一、前言
  • 二、思路
    • 1、新增面
      • ①、在drawShape方法中,新增一个实际左侧面,
      • ②、 在drawShape方法中,新增一个实际右侧面,
      • ③ 绘制
    • 2、新增series对象
      • ① 添加实际值的左侧面和右侧面
  • 三、效果图

一、前言

事情是这样子的,收到一个粉丝的评论,说想做一个这样的立体柱状图,我没有写过,但是我大概知道了一个思路,然后给粉丝回复以后就开始尝试了,
在这里插入图片描述

二、思路

这图我的想法是在原本的柱状图上在加两个面,关于如何绘制柱状图的,请看我的另一篇文章,链接如下:03-echarts如何画立体柱状图
说干就干,

1、新增面

①、在drawShape方法中,新增一个实际左侧面,

  const trueLeft = echarts.graphic.extendShape({buildPath (ctx, shape) {const { topBasicsYAxis, bottomYAxis, basicsXAxis } = shape;// 侧面宽度const WIDTH = 15;// 斜角高度const OBLIQUE_ANGLE_HEIGHT = 3.6;const p1 = [basicsXAxis - WIDTH, topBasicsYAxis - OBLIQUE_ANGLE_HEIGHT];const p2 = [basicsXAxis - WIDTH, bottomYAxis];const p3 = [basicsXAxis, bottomYAxis];const p4 = [basicsXAxis, topBasicsYAxis- OBLIQUE_ANGLE_HEIGHT];ctx.moveTo(p1[0], p1[1]);ctx.lineTo(p2[0], p2[1]);ctx.lineTo(p3[0], p3[1]);ctx.lineTo(p4[0], p4[1]);console.log('ctx---',ctx)},});

关于P1,P2,P3,P4的位置在我的柱状图文章中也有仔细描述,就不细讲了,根据效果图可以知道,P1和P4的位置是水平的,所以Y轴是一致的,将原先的leftShape变量复制过来,更改一下P4的y轴定义,

②、 在drawShape方法中,新增一个实际右侧面,

 const trueRight = echarts.graphic.extendShape({buildPath (ctx, shape) {const { topBasicsYAxis, bottomYAxis, basicsXAxis } = shape;// 侧面宽度const WIDTH = 15;// 斜角高度const OBLIQUE_ANGLE_HEIGHT = 3.6;const p1 = [basicsXAxis, topBasicsYAxis - OBLIQUE_ANGLE_HEIGHT];const p2 = [basicsXAxis, bottomYAxis];const p3 = [basicsXAxis + WIDTH, bottomYAxis];const p4 = [basicsXAxis + WIDTH, topBasicsYAxis - OBLIQUE_ANGLE_HEIGHT];ctx.moveTo(p1[0], p1[1]);ctx.lineTo(p2[0], p2[1]);ctx.lineTo(p3[0], p3[1]);ctx.lineTo(p4[0], p4[1]);},});

由效果图可知,P1和P4的y轴依旧是一致的,所以将rightShape变量复制过来,更改P1的y轴定义,

③ 绘制

      echarts.graphic.registerShape("trueLeft", trueLeft);echarts.graphic.registerShape("trueRight", trueRight);

2、新增series对象

① 添加实际值的左侧面和右侧面

series的新对象中只有实际的两个面,所以可以直接将series的第一个对象复制过来,然后在return中的children中只留下两个对象,然后更改type名字分别为trueLeft和trueRight,我更改了一下柱子的颜色,具体情况可以根据自己所需的颜色来更改

 {type: "custom",data: [50],barWidth: 30,renderItem (params, api) {// 基础坐标const basicsCoord = api.coord([api.value(0), api.value(1)]);// 顶部基础 y 轴const topBasicsYAxis = basicsCoord[1];// 基础 x 轴const basicsXAxis = basicsCoord[0];// 底部 y 轴const bottomYAxis = api.coord([api.value(0), 0])[1];return {type: "group",children: [{type: "trueLeft",shape: {topBasicsYAxis,basicsXAxis,bottomYAxis,},style: {fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 0,color: 'rgb(0, 192, 238,0.8)',},{offset: 0.8,color: 'rgb(0, 194, 239,0.2)',},{offset: 1,color: 'rgb(0, 194, 239,0)',},]),emphasis: {fill: 'yellow', // 鼠标高亮时的填充颜色},},},{type: "trueRight",shape: {topBasicsYAxis,basicsXAxis,bottomYAxis,},style: {fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 0,color: '#00CCF5 ',},{offset: 0.8,color: 'rgb(4, 88, 115,0.8)',},{offset: 1,color: 'rgb(4, 88, 115,0.6)',},]),emphasis: {fill: 'yellow', // 鼠标高亮时的填充颜色},},},],};}},

三、效果图

具体的颜色什么的自己可以调整,每个children对象里面的style就是用来调整
在这里插入图片描述

http://www.lryc.cn/news/376260.html

相关文章:

  • HTML5 Web Workers: 异步编程的强大力量
  • Flutter第十二弹 Flutter多平台运行
  • 30天学会QT---------------大项目之在线考试系统
  • 搜维尔科技:力反馈主手—手术机器人应用〈腔镜手术机器人平台—进入手术室动物实验〉
  • 缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)
  • 初识es(elasticsearch)
  • AI在线免费视频工具2:视频配声音
  • Kafka 如何保证消息顺序及其实现示例
  • 内存分配器性能优化
  • 《OKR工作法》读书笔记
  • 2025年计算机毕业设计题目参考-简单容易
  • 3.8. 马氏链-一般状态空间的马氏链(Harris链)
  • Python8 使用结巴(jieba)分词并展示词云
  • python中scrapy
  • 基础语法总结 —— Python篇
  • 数据库系统概述选择简答概念复习
  • template标签
  • WPF 程序 分布式 自动更新 登录 打包
  • 视频汇聚安防综合管理平台EasyCVR支持GA/T 1400视图库标准及设备接入配置
  • pgsql给单独数据库制定账号权限
  • 【Docker安装】Ubuntu系统下部署Docker环境
  • Flink Kafka获取数据写入到MongoDB中 样例
  • Android Jetpack Compose入门教程(二)
  • 如何避免接口重复请求(axios推荐使用AbortController)
  • 算法设计与分析:网络流求解棒球赛淘汰问题C++
  • Linux Ubuntu 24.04 C语言gcc编译过程详解
  • Python自动化办公篇—pandas操作Excel:读取+查看+选择+清洗+排序+筛选+函数+写入
  • 数据库大作业——音乐平台数据库管理系统
  • 【DBA早下班系列】—— 并行SQL/慢SQL 问题该如何高效收集诊断信息
  • 用python实现多文件多文本替换功能