echarts绘制自定义展示排名和数据等信息(数据排名进度条)

目录

一、结构分析

二、配置图表各部分

1.名称及排序

2.进度条绘制

3.数据末端圆形绘制

(1)基本配置

(2)数据

(3)坐标轴配置

(4)点的样式

(5)项的样式(itemStyle)

(6)层级配置

三、示例代码


最终实现的样子:

一、结构分析

根据UI设计图,要实现如图效果的横向排列表

开始想用elementui进度条组件,但是它不够能定义太多的样式(如渐变、数据末端圆形等)。因为觉得麻烦,也不想用原生的html\css\js书写,所以还是采用echarts绘制。

想这个分为两部分:左侧名称,右侧进度条及数据展示,并没有思路不知如何下手。

参考了一位博主大大的文:echarts横向进度条-CSDN博客

思路有了:就如这位博主的思路,通过 ECharts 创建了一个包含多个 y 轴、渐变条形图、背景条形图和散点数据点完成这个效果。

二、配置图表各部分

1.名称及排序

都是常用的一些属性

grid:设置图表的内边距。

xAxis:隐藏 x 轴。

yAxis:定义了多个 y 轴,分别用于:显示地区名称、显示排序(数字)等

series:定义了多个图表的数据系列,包括条形图系列,用于显示每个地区的数据条。另一个条形图系列,用作进度条的背景......

let option={
        // 间距
        grid: {
            left: '10%',
            top: '10%',
            right: '10%',
            bottom: '10%',
            containLabel: true
        },
        xAxis: [{
            show: false,
        }],
        // 名称
        yAxis: [
          {
            axisTick: 'none',
            axisLine: 'none',
            offset: '20',
            axisLabel: {
                textStyle: {
                    color: '#8CBAEE',
                    fontSize: '12',
                }
            },
            data: ['大足区', '秀山县', '涪陵区', '万州区', '忠县']
          }, 
          // 排序
          {
            axisTick: 'none',
            axisLine: 'none',
            axisLabel: {
                textStyle: {
                    color: 'red',
                    fontSize: '12',
                }
            },
            data: ['5', '4', '3', '2', '1']
          },
          {
            axisLine: {
                lineStyle: {
                    color: 'rgba(0,0,0,0)'
                }
            },
            data: [],
          }
        ],
}

2.进度条绘制

柱状图模拟进度条

        series: [
          // 数据
          {
            name: '条',
            type: 'bar',
            yAxisIndex: 0,
            data: [900, 470, 850, 610, 340],
            label: {
                normal: {
                    show: true,
                    position: 'right',
                    textStyle: {
                        color: '#ffffff',
                        fontSize: '12',
                    }
                }
            },
            barWidth: 4,
            itemStyle: {
                normal: {
                    color: function (params) {
                      let colorList = [
                        ['#0A083A', '#5F74E9','#A03EF5'],
                        ['#0A083A', '#33A6FF','#07C1FE'],
                        ['#0A083A', '#4A6DEB','#20B3F9'],
                        ['#0A083A', '#496EF2','#AE2EFD'],
                        ['#0A083A', '#895ADE','#D987C5'],
                      ]
                      let index = params.dataIndex % colorList.length; //确保索引在colorList的范围内循环
                      return new echarts.graphic.LinearGradient(0, 0, 1, 1, [
                          {offset: 0,color: colorList[index][0]},
                          {offset: 0.4,color: colorList[index][1]},
                          {offset: 1,color: colorList[index][2]}
                      ]);
                    }
                }
            },
            z:2
          }, 
          // 进度条背景
          {
            name: '背景',
            type: 'bar',
            yAxisIndex: 1,
            data: [1000,1000,1000,1000,1000], // 总数据,可动态绑定
            barWidth: 6,
            itemStyle: {
                normal: {
                    color: 'blue',
                    barBorderRadius: 10,
                }
            },
            z: 1
          }, 
        ]

3.数据末端圆形绘制

echarts官网scatter:Documentation - Apache ECharts

(1)基本配置

name: 图表的名称。

type: 图表的类型,这里是'scatter',表示这是一个散点图。

hoverAnimation: 设置为false,表示鼠标悬停在数据点上时,数据点不会有动画效果。

(2)数据

data: 这是一个数组,包含了散点图中所有点的坐标。每个点由两个值组成,分别代表X轴和Y轴的坐标。例如,[340, 4]表示一个点的X坐标为340,Y坐标为4。

(3)坐标轴配置

yAxisIndex: 设置为0,表示这个散点图使用图表中第一个Y轴。这在图表中有多个Y轴时特别有用,确保散点图与特定的Y轴对应。

(4)点的样式

symbol: 设置为'circle',表示散点图中的点使用圆形符号。

symbolSize: 设置为6,表示每个圆形符号的大小。

(5)项的样式(itemStyle

这里只设置了color: 这是一个函数,用于动态设置每个点的颜色。函数接受一个参数params,其中params.dataIndex是当前数据点的索引。根据这个索引,函数从一个颜色数组colors中选择一个颜色返回。

(6)层级配置

z: 设置为4,这用于控制图表的堆叠顺序。在ECharts中,数值越大的系列(series)会被绘制在数值较小的系列之上。

三、示例代码

其他样式在调整下,在从后端获取数据,就跟UI图大差不差了。以下是我实现效果图与示例代码,可供参考:

完整代码如下:

    getholdTop(){
      let holdTopDom = document.getElementById("showprogress");
      this.holdTop = echarts.init(holdTopDom);
      let option={
        // 间距
        grid: {
            left: '10%',
            top: '10%',
            right: '10%',
            bottom: '10%',
            containLabel: true
        },
        xAxis: [{
            show: false,
        }],
        // 名称
        yAxis: [
          {
            axisTick: 'none',
            axisLine: 'none',
            offset: '20',
            axisLabel: {
                textStyle: {
                    color: '#8CBAEE',
                    fontSize: '12',
                }
            },
            data: ['大足区', '秀山县', '涪陵区', '万州区', '忠县']
          }, 
        ],
        series: [
          // 数据
          {
            name: '条',
            type: 'bar',
            yAxisIndex: 0,
            data: [900, 470, 850, 610, 340],
            label: {
                normal: {
                    show: true,
                    position: 'right',
                    textStyle: {
                        color: '#ffffff',
                        fontSize: '12',
                    }
                }
            },
            barWidth: 4,
            itemStyle: {
                normal: {
                    color: function (params) {
                      let colorList = [
                        ['#0A083A', '#5F74E9','#A03EF5'],
                        ['#0A083A', '#33A6FF','#07C1FE'],
                        ['#0A083A', '#4A6DEB','#20B3F9'],
                        ['#0A083A', '#496EF2','#AE2EFD'],
                        ['#0A083A', '#895ADE','#D987C5'],
                      ]
                      let index = params.dataIndex % colorList.length; //确保索引在colorList的范围内循环
                      return new echarts.graphic.LinearGradient(0, 0, 1, 1, [
                          {offset: 0,color: colorList[index][0]},
                          {offset: 0.4,color: colorList[index][1]},
                          {offset: 1,color: colorList[index][2]}
                      ]);
                    }
                }
            },
            z:2
          }, 
          // 散点圆圈
          {
            name: '数据点',
            type: 'scatter',
            hoverAnimation: false,
            data: [
              [340, 4], // 需要x|y坐标来定位点
              [610, 3],
              [850, 2],
              [470, 1],
              [900, 0]
            ],
            yAxisIndex: 0, // 使用与条形图相同的y轴
            symbol: 'circle', // 使用圆形符号
            symbolSize: 6, // 调整圆点的大小
            itemStyle: {
              color: function (params) {
                let colors = ['#D987C5', '#AE2EFD', '#20B3F9', '#07C1FE', '#A03EF5'];
                return colors[params.dataIndex];
              }
            },
            z: 4
          },
          {
            name: '数据点',
            type: 'scatter',
            hoverAnimation: false,
            data: [
              [340, 4],
              [610, 3],
              [850, 2], 
              [470, 1], 
              [900, 0] 
            ],
            yAxisIndex: 0,
            symbol: 'circle',
            symbolSize: 12,
            itemStyle: {
              color: function (params) {
                let colors = ['rgba(217,135,197,0.5)', 'rgba(147,46,253,0.5)', 'rgba(32,172,249,0.5)', 'rgba(7,193,254,,,0.5)', 'rgba(160,62,245,0.5'];
                return colors[params.dataIndex];
              }
            },
            z: 3
          }
        ]
      };
      option&&this.holdTop.setOption(option);
    },

若文章对你有帮助,点赞、收藏加关注吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CV(4)--边缘提取和相机模型

前言 仅记录学习过程,有问题欢迎讨论 边缘提取(涉及语义分割): 图象的边缘是指图象局部区域亮度变化显著的部分,也有正负之分,暗到亮为正 求边缘的幅度:sobel,Canny算子 图像分高频分量和低…

【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件

sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…

如何用VScode恢复误删文件-linux

如果你用vscode远程在服务器上办公&#xff0c;有一天你用了&#xff1a; rm -rf *然后你发现你的文件不见了&#xff0c;不要着急。 这种方法只适用于不多的几个文件。 这个时候你要做的是&#xff0c;查看右侧的1&#xff1a; 从1里面查找你删除的文件&#xff0c;然后点…

IoTDB 报错 There are no available SchemaRegionGroup RegionGroups currently

现象 现象1&#xff1a; 现象2&#xff1a;时序数据库 IoTDB 系统遇到了一个持续增长的 schema_region 目录问题&#xff0c;导致频繁出现内存溢出&#xff08;OutOfMemory&#xff09;错误。在路径 data/datanode/consensus/schema_region 下&#xff0c;系统每分钟都会创建多…

使用ERA5数据绘制风向玫瑰图的简易流程

使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图&#xff0c;想到的还是高分辨率的ERA5land的数据&#xff08;0.1分辨率&#xff0c;逐小时分辨率&#xff0c;1950年至今&#xff09;。 风向&#xff0c;我分为了16个&…

hbuilder 安卓app手机调试中基座如何设置

app端使用基座 手机在线预览功能 1.点击运行 2.点击运行到手机或者模拟器 3.制作自定义调试基座 4.先生成证书【可以看我上一篇文档写的有】&#xff0c;点击打包 5.打包出android自定义调试基座【android_debug.apk】,【就跟app打包一样需要等个几分钟】 6.点击运行到手…

Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控

一、前言 用ffmpeg做硬解码开发&#xff0c;参考自带的示例hw_decode.c即可&#xff0c;里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码&#xff0c;也就是无需区分用的何种显卡&#xff0c;操作系统自动调度&#xff0c;基本上满足了各种场景的需要&#xff0…

Photoshop提示错误弹窗dll缺失是什么原因?要怎么解决?

Photoshop提示错误弹窗“DLL缺失”&#xff1a;原因分析与解决方案 在创意设计与图像处理领域&#xff0c;Photoshop无疑是众多专业人士和爱好者的首选工具。然而&#xff0c;在使用Photoshop的过程中&#xff0c;有时会遇到一些令人头疼的问题&#xff0c;比如突然弹出的错误…

EXCEL 数据透视表基础操作

目录 1 选择数据&#xff0c;插入数据透视表 2 选择数据透视表生成位置 3 出现了数据透视表的面板 4 数据透视表的基本结构认识 4.1 交叉表/列联表 4.2 row, column, cell 一个新增的筛选器&#xff0c;就这么简单 4.3 可以只添加 rowcell/值 &#xff0c;也可以colu…

AI生成图表化:深入探索Mermaid

引言 在使用生成式AI时&#xff0c;只要你提出让AI帮你生成mermaid图&#xff0c;AI的生成就会出现丰富的图形&#xff01; 在现代文档编写中&#xff0c;图表的使用不仅能增强文档的可读性&#xff0c;还能更直观地表达复杂的概念和流程。Mermaid 作为一款开源的图表绘制工具…

iOS runtime总结数据结构,消息传递、转发和应用场景

runtime篇 首先看一下runtiem底层的数据结构 首先从objc_class这么一个结构体&#xff08;数据结构&#xff09;开始&#xff0c;objc_class继承于objc_object。 objc_object当中有一个成员变量叫isa_t&#xff0c;那么这个isa_t指针就指向一个objc_class类型的类对象&#xff…

前端编辑器JSON HTML等,vue2-ace-editor,vue3-ace-editor

与框架无关 vue2-ace-editor有问题&#xff0c;ace拿不到&#xff08;brace&#xff09; 一些组件都是基于ace-builds或者brace包装的 不如直接用下面的&#xff0c;不如直接使用下面的 <template><div ref"editor" class"json-editor"><…

QT:在线安装与离线安装

QT 学习系列 QT&#xff1a;在线安装与离线安装 QT 学习系列一、安装&#xff08;一&#xff09;离线安装windows系统Linux 系统Mac 系统 &#xff08;二&#xff09;在线安装 二、 环境变量配置三、验证总结 一、安装 &#xff08;一&#xff09;离线安装 windows系统 获取…

国产固态继电器的演变:可靠的电源解决方案

家用国产固态继电器(SSR)已成为各行各业的基石&#xff0c;性能可靠、设计紧凑、效率高。这些先进的开关设备取代了传统的机电继电器&#xff0c;具有静音运行、使用寿命更长、可靠性更高等诸多优点。家用SSR专为从工业自动化到家用电器等各种应用而设计&#xff0c;展示了本地…

Java-DataX 插件机制示例

示例代码 DataXPluginExample: DataX 项目的plugin 机制学习https://gitee.com/wendgit/data-xplugin-example/ 摘要 DataXPluginExample 是一个我编写的专门解读DataX插件机制的示例项目&#xff0c;旨在深入解析和掌握DataX的插件机制。本示例通过简洁明了的实现方式&#…

Ubuntu boot-repair安装过程

本教程只是在UBuntu系统无法引导才使用的方法&#xff0c;有可能需要提前使用U盘刻录UBuntu镜像去引导。 假如winUBuntu双系统&#xff0c;找不到紫色的UBuntu界面了&#xff0c;请参考&#xff1a;windows10ubuntu双系统开机引导界面不见的解决办法_双系统不出现引导界面-CSD…

苹果公司即将为iPhone和智能家居改用自主研发的蓝牙和Wi-Fi芯片

美股快讯&#xff1a;苹果公司即将为iPhone和智能家居改用自主研发的蓝牙和Wi-Fi芯片 苹果公司计划从明年开始在其设备上改用国产芯片进行蓝牙和Wi-Fi连接&#xff0c;此举将逐步淘汰目前由博通提供的部分部件。这种代号为Proxima的芯片已经开发了数年&#xff0c;现在计划用于…

汽车车牌识别数据集,支持YOLO,COCO,VOC格式的标注,8493张图片,可识别多种环境下的车牌

汽车车牌识别数据集&#xff0c;支持YOLO&#xff0c;COCO&#xff0c;VOC格式的标注&#xff0c;8493张图片&#xff0c;可识别多种环境下的车牌 数据集分割 训练组82&#xff05; 6994图片 有效集12&#xff05; 999图片 测试集6% 500图片 预处理 自动…

Towards Frame Rate Agnostic Multi-object Tracking—迈向帧率无关的多目标跟踪

Towards Frame Rate Agnostic Multi-object Tracking—迈向帧率无关的多目标跟踪 发表在IJCV 2023年 作者&#xff1a;Weitao Feng, Lei Bai, Yongqiang Yao, Fengwei Yu & Wanli Ouyang 研究目标&#xff1a;多目标跟踪的帧率无关性研究 IJCV 在计算机视觉领域的影响力非常…