Echarts 基础柱状图,实现柱体设定颜色且带有图例

news2024/11/15 13:49:57

摘要:柱状图的最初要求很简单,4个柱体高低显示不同分类的值,逐渐增加的要求有:自定义特定分类颜色、增加图例展示、点击图例控制分类显示和隐藏。记录下遇到的问题和一些不熟悉的属性的使用。

        大致的显示结果如上图,下面逐步分解下实现步骤;

1. 自定义特定分类颜色

        这个最简单,在官网示例有。只需要在series中传入数据时date配置itemStyle.color即可。例如:

series: [
  {
    type: 'bar',
    data: [120,
      {
        value: 200,
        itemStyle: {
          color: '#a90000'
        }
      }, 150, 160
    ]
  }
]
// 默认的调色盘如下,可以参考设置,保持与其他图表颜色对应
['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc']

2. 增加图例legend展示

        首先,需要配置legend属性,将展示的细节逐个配置清楚,但这时图例并没有展示。此时需要注意:图例需要根据数据系列的名称来显示,确保每个数据系列都有设置名称(name 属性)。当我们确保series中每个系列都有name后,图例可以正常显示出来,依然需要处理一些细节避免显示如下:

  • 每个系列中显示多条数据,例如,"进行中"系列应该传入进行中的value,将其余使用null填充,其他系列类似;
  • 上述格式处理series中的data后大概率号有个问题,就是每个系列中的柱状图不居中,这就需要使用数据堆叠属性stack,同个类目轴上系列配置相同的stack值可以堆叠放置;

注:目前 stack 只支持堆叠于 'value' 和 'log' 类型的类目轴上,不支持 'time' 和 'category' 类型的类目轴。此处Y轴为value类型。

        综上处置后,展示效果基本待到预期

**## legend属性配置**
legend: {
  show: true,
  orient: "horizontal",
  icon: "rect",
  itemWidth: 15,
  itemHeight: 15, //图例宽高
  textStyle: {
    color: "#A0B2D3",
    fontSize: 16,
  },
  data: [{
    name: '进行中: ' + this.inProgressCount,
    itemStyle: {
        color: '#91cc75'          // **由于柱状图设定的颜色和默认调色盘不一致,legend也要设置颜色保持与柱体一致**
      }
  },{
    name: '阻塞中: ' + this.blockedCount,
    itemStyle: {
      color: '#ee6666'
    }
  }, {
    name: '已完成: ' + this.completedCount,
    itemStyle: {
      color: '#5470c6'
    }
  }, {
    name: '未启动: ' + this.unstartedCount,
    itemStyle: {
      color: '#fac858'
    }
  }],
},
**## series的配置格式**
series: [
  {
    name: '进行中: ' + this.inProgressCount,
    type: 'bar',
    **stack: 'sta',  // 数据堆叠属性**
    barWidth: 25,
    data: [{
      value: this.inProgressCount,
      itemStyle: {
        color: '#91cc75'
      }
    }, null, null, null]
  },{
    name: '阻塞中: ' + this.blockedCount,
    type: 'bar',
    stack: 'sta',
    barWidth: 25,
    data: [null, {
      value: this.blockedCount,
      itemStyle: {
        color: '#ee6666'
      }
    }, null, null]
  }, {
    name: '已完成: ' + this.completedCount,
    type: 'bar',
    stack: 'sta',
    barWidth: 25,
    data: [null, null, {
      value: this.completedCount,
      itemStyle: {
        color: '#5470c6'
      }
    }, null]
  }, {
    name: '未启动: ' + this.unstartedCount,
    type: 'bar',
    stack: 'sta',
    barWidth: 25,
    data: [null, null, null, {
      value: this.unstartedCount,
      itemStyle: {
        color: '#fac858'
      }
    }]
  }
]

3. 点击图例控制分类显示和隐藏

        其实图例自身支持点击控制对应分类的显示隐藏,此处是要说明一个细节。由于页面处理不同屏幕兼容使用了zoom这导致图表鼠标点击和tooltip显示的偏移问题,解决方法其实不复杂,既然是由于全局缩放影响echarts容器,则还原缩放即可,例如:

// 使用chartsZoom解决:this.chartsZoom = 1 / baseZoom 
<div class="pieChart" :data-index=index :data-itemIndex=itemIndex :style="{width: '800px', height: '300px', zoom: chartsZoom}"></div>

        这样处理鼠标点击和tooltip 显示都正常了,不过通过电视机浏览器打开就会出现图表由于没有缩放,显示过大溢出页面的情况。此处,展示为主故未处理偏移问题。

可参考: https://www.cnblogs.com/w-rong/p/13962619.htmlicon-default.png?t=N7T8https://www.cnblogs.com/w-rong/p/13962619.html

        完整代码如下:

initCharts () {
  console.log('init charts')
  const myChart = echarts.init(document.getElementById("chartStatistic"));
  console.log('init charts2')
  var option;

  option = {
    xAxis: {
      type: 'category',
      data: ['进行中', '阻塞中', '已完成', '未启动'],
      axisLabel: {
        fontSize: 16,
        color: '#86A2C2'
      },
      splitLine: {
        show: true,
        lineStyle: {
          opacity: 0.5,
          width: 0.1 // 平行Y轴分割线
        }
      }
    },
    yAxis: {
      type: 'value',
      axisLine: {
        lineStyle: {
          opacity: 1,
          width: 0.1
        }
      },
      axisTick: {
        show: true,
        lineStyle: {
          width: 0.1,
          color: '#FFFFFF',
          opacity: 0.5
        }
      },
      axisLabel: {
        fontSize: 16,
        color: '#86A2C2'
      },
      splitLine: { // 分隔线的配置
        show: true, // 是否显示分隔线
        lineStyle: {
          opacity: 0.5,
          width: 0.4 // 平行X轴分割线
        }
      },
    },
    legend: {
      show: true,
      orient: "horizontal",
      icon: "rect",
      itemWidth: 15,
      itemHeight: 15, //图例宽高
      textStyle: {
        color: "#A0B2D3",
        fontSize: 16,
      },
      data: [{
        name: '进行中: ' + this.inProgressCount,
        itemStyle: {
            color: '#91cc75'
          }
      },{
        name: '阻塞中: ' + this.blockedCount,
        itemStyle: {
          color: '#ee6666'
        }
      }, {
        name: '已完成: ' + this.completedCount,
        itemStyle: {
          color: '#5470c6'
        }
      }, {
        name: '未启动: ' + this.unstartedCount,
        itemStyle: {
          color: '#fac858'
        }
      }],
    },
    series: [
      {
        name: '进行中: ' + this.inProgressCount,
        type: 'bar',
        stack: 'sta',
        barWidth: 25,
        data: [{
          value: this.inProgressCount,
          itemStyle: {
            color: '#91cc75'
          }
        }, null, null, null]
      },{
        name: '阻塞中: ' + this.blockedCount,
        type: 'bar',
        stack: 'sta',
        barWidth: 25,
        data: [null, {
          value: this.blockedCount,
          itemStyle: {
            color: '#ee6666'
          }
        }, null, null]
      }, {
        name: '已完成: ' + this.completedCount,
        type: 'bar',
        stack: 'sta',
        barWidth: 25,
        data: [null, null, {
          value: this.completedCount,
          itemStyle: {
            color: '#5470c6'
          }
        }, null]
      }, {
        name: '未启动: ' + this.unstartedCount,
        type: 'bar',
        stack: 'sta',
        barWidth: 25,
        data: [null, null, null, {
          value: this.unstartedCount,
          itemStyle: {
            color: '#fac858'
          }
        }]
      }
    ]
  };
  console.log('init chartsn'+ JSON.stringify(option.series))
  option && myChart.setOption(option);
  window.addEventListener('resize',
    _.debounce(function() {
      myChart.resize()
    }, 200)
  )
},

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

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

相关文章

CSMM软件过程能力成熟度模型

软件过程能力成熟度模型旨在通过提升组织的软件开发能力帮助顾客提升软件的业务价值。 本模型借鉴吸收了软件工程、项目管理、产品管理、组织治理、质量管理、卓越绩效管理、精益软件开发等领域的优秀实践&#xff0c;为组织提供改进和评估软件过程能力的一个成熟度模型。 总体…

55.跳跃问题

这个Java代码定义了一个名为Solution的类&#xff0c;并实现了一个名为canJump的方法。该方法用于判断一个给定整数数组&#xff08;表示每个位置可以跳跃的最大长度&#xff09;中&#xff0c;是否可以从数组的第一个位置跳到最后一个位置。 // 定义一个名为Solution的类 cla…

Docker搭建LNMP环境实战(04):安装VMwareTools共享文件夹

1、加载VMware Tools安装盘 在VMware客户端&#xff0c;点击主菜单&#xff1a; 图1 启动VMware Tools安装 再点击下面的菜单&#xff1a; 图2 打开设置界面 出现下面的界面&#xff0c;虚拟DVD加载的是linux.iso 图3 查看VMware Tools的DVD虚拟安装映像文件 将DVD加载到CentO…

【小黑送书—第十五期】>>一本书掌握数字化运维方法,构建数字化运维体系(文末送书)

字化转型已经成为大势所趋&#xff0c;各行各业正朝着数字化方向转型&#xff0c;利用数字化转型方法论和前沿科学技术实现降本、提质、增效&#xff0c;从而提升竞争力。 数字化转型是一项长期工作&#xff0c;包含的要素非常丰富&#xff0c;如数字化转型顶层设计、组织架构…

linux下关闭swap文件系统

临时关闭&#xff08;马上生效&#xff09; 永久关闭&#xff08;重启计算机才能生效&#xff09; vim /etc/fstab

搜维尔科技【应急推演】虚拟仿真技术的发展为煤炭矿井的安全生产找到新的出口

煤炭矿井的安全生产一直是我国关注的重大事项&#xff0c;保证煤炭矿井的安全生产&#xff0c;减少人员伤亡等不可逆的损失成为重中之重。虚拟仿真技术的发展为煤炭矿井的安全生产找到了新的出口。依托虚拟仿真技术&#xff0c;对煤炭矿井进行实时的生产监测&#xff0c;对矿井…

【项目管理——时间管理】【自用笔记】

1 项目时间管理&#xff08;进度管理&#xff09;概述 过程&#xff1a;&#xff08;2—6&#xff09;为规划过程组&#xff0c;7为监控过程组 题目定义&#xff1a;项目时间管理又称为进度管理&#xff0c;是指确保项目按时完成所需的过程。目标&#xff1a;时间管理的主要目标…

【python地图添加指北针和比例尺】

文章目录 1、前言2、代码2.1、指北针2.2、比例尺 3、结果 1、前言 地理信息绘制中添加指北针和比例尺&#xff0c;使得图像更专业。 2、代码 2.1、指北针 def add_north(ax, labelsize18, loc_x0.95, loc_y0.99, width0.06, height0.09, pad0.14):"""画一个…

记录些LLM相关的知识

MMR MMR&#xff08;Maximum Marginal Relevance&#xff09;最大边际相关性是一种用于信息检索和推荐系统的算法&#xff0c;它的目的是在推荐项目时平衡相关性和多样性。MMR算法旨在找出与用户查询最相关的同时又足够多样化的项目集合。 在信息检索领域&#xff0c;MMR算法通…

【Pt】马灯贴图绘制过程 02-制作锈迹

目录 一、边缘磨损效果 二、刮痕效果 三、边缘磨损与刮痕的混合 四、锈迹效果 本篇效果&#xff1a; 一、边缘磨损效果 将智能材质“Iron Forge Old” 拖入图层 打开“Iron Forge Old” 文件夹&#xff0c;选中“Sharpen”&#xff08;锐化&#xff09;&#xff0c;增大“…

Cesium自定义Shader实现流动尾线

目录 项目地址实现效果核心代码 项目地址 https://github.com/zhengjie9510/webgis-demo 实现效果 核心代码 class SpriteLineMaterialProperty {constructor(options) {this._definitionChanged new Cesium.Event();this._speed undefinedthis._color undefinedthis.spe…

考研数学|《660题》这样刷最有效!

考研数学660题作为许多考研学子在备考过程中重要的复习资料之一&#xff0c;自然也有很多同学会有660该怎么刷的问题。为了更有效率地使用这些题目&#xff0c;希望以下策略能帮到大家&#xff0c; 首先&#xff0c;你需要根据自己的实际情况&#xff0c;制定一个合理的学习计…

Leetcode70. 爬楼梯(动态规划)

Leetcode原题 Leetcode70. 爬楼梯 标签 记忆化搜索 | 数学 | 动态规划 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f;示例 1&#xff1a;输入&#xff1a;n 2 输出&#xff1a;2 解…

2024/03/27(C++·day3)

一、思维导图 二、完成下面类 代码 #include <cstring> #include <iostream>using namespace std;class myString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 无参构造函数myString() : size(10){str new char[si…

AI智能分析网关V4如何使用GB28181注册到EasyCVR平台?具体步骤是什么?

旭帆科技的智能分析网关V4内含近40种智能分析算法&#xff0c;包括人体、车辆、消防、环境卫生、异常检测等等&#xff0c;在消防安全、生产安全、行为检测等场景应用十分广泛。如常见的智慧工地、智慧校园、智慧景区、智慧城管等等&#xff0c;还支持抓拍、记录、告警、语音对…

Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias

场景 Nginx搭建静态资源映射实现远程访问服务器上的图片资源&#xff1a; Nginx搭建静态资源映射实现远程访问服务器上的图片资源_nginx 当作图片资源访问 博客-CSDN博客 以上在配置静态资源映射时使用的如下配置 location / {root D:/pic_old/;try_files $uri $uri/ /ind…

MySQL高级SQL语言常用查询与连接查询

前言 对 MySQL 数据库&#xff0c;除了使用基本语言处理一些简单的事务外&#xff0c;还可以使用高级SQL语言用于复杂的数据库操作。包括多表联合查询、子查询、触发器、存储过程和视图等功能。 目录 一、数据库函数 1. 数学函数 2. 聚合函数 3. 字符串函数 4. 日期时间…

http响应练习—在服务器端渲染html(SSR)

一、什么是服务器端渲染&#xff08;SSR&#xff09; 简单说&#xff0c;就是在服务器上把网页生成好&#xff0c;整个的HTML页面生成出来&#xff0c;生成出的页面已经包含了所有必要的数据和结构信息&#xff0c;然后直接发给浏览器进行展现。 二、例题 要求搭建http服务&a…

对下载软件/文件进行校验的工具(Checksum and GPG)

前言 之前装软件一直都没有验证安装文件的习惯&#xff0c;信息安全意识不高&#xff0c;碰巧最近没啥事&#xff0c;微微写篇文章记录下校验工具&#xff08;互联网http、https、ftp 服务并没有那么安全&#xff0c;是可以被劫持篡改。老装软件选手了&#xff0c;是该养成个校…

Xorbits Inference比Ollama更强大的模型部署与推理框架

什么是Xorbits Inference Xorbits Inference&#xff08;Xinference&#xff09;是一个性能强大且功能全面的分布式推理框架。可用于大语言模型&#xff08;LLM&#xff09;&#xff0c;语音识别模型&#xff0c;多模态模型等各种模型的推理。通过 Xorbits Inference&#xff…