基于vue+echarts实现柱状图渐变色效果(每个柱子颜色不同)

 更新时间:2024年05月13日 10:06:34   作者:小蹦跶儿  
前段时间的vue项目中用到了echarts柱状图,由于UI设计稿中要求使用渐变色,并且每个柱子的颜色不同,于是做了一番研究,现将我的实现方案分享如下

一、需要实现的效果图

二、背景

Echarts的柱状图,由于默认所有柱子都是同一个颜色,且颜色为纯色系,显示效果不能满足我们的设计稿要求,遂需要进行改造。

本文介绍如何为每个柱子添加不同的颜色,以及如何添加渐变色,以丰富图表的显示效果。

除了颜色的问题,同时存在以下几个小问题会一同解决:

  • 多数值柱状图;
  • 带圆角的柱状图;

三、解决思路

这是一个集多数值的柱状图、每个柱子的颜色不同,且每个柱子都有自己的渐变色、带圆角的柱状图于一体的柱状图,就需要考虑代码的整洁性和复用性。

由于柱子的宽度和y轴坐标值一样,只是每个柱子的值、颜色、名称不同,可以考虑将每个柱子的设置对象写成公共方法,经过传值完成。

四、为每个柱子设置不同颜色,以及渐变色的设置

这个是在series中进行设置的,series是个数组,我们有四个柱子表示四种数据,每个柱子对应数组中的一个对象,即series数组中包含了四个对象:

series: [
  getBarSeriesData('telNoAnsweredCount'),
  getBarSeriesData('emptyCount'),
  getBarSeriesData('timeoutCount'),
  getBarSeriesData('joinEmptyCount')
]

备注:为了提高代码的可读性和可拓展性,减少冗余代码,此处将数组中的对象提取成一个公共方法,根据参数不同,显示不同数据。

  • 首先将每个柱子的配置对象写成公共方法:

下图是该公共方法的代码内容截图,主要是将渐变色的色值(color)、柱子名称(name)和数据(data)写成变量:

附上代码如下:

function getBarSeriesData(target: keyof typeof propDict): SeriesOption {
  return {
    name: propDict[target].name,
    data: incomingCallTrendData.data.data[target],
    tooltip: {
      trigger: 'axis'
    },
    type: 'bar',
    barWidth: '6', // 柱子宽度可自定义
    roundCap: true,
    itemStyle: {
      borderRadius: [5, 5, 0, 0], // 带圆角的柱子设置
      color: {
        type: 'linear',
        x: 0,
        y: 0,
        x2: 0,
        y2: 0.95,
        colorStops: [
          {
            offset: 0,
            color: propDict[target].colorStart, // 0% 处的颜色
          },
          {
            offset: 1,
            color: propDict[target].colorStop, // 100% 处的颜色
          },
        ],
        global: false, // 缺省为 false
      },
    }
  }
}
  • 将渐变色的颜色、柱子名称(name)进行自定义:

const propDict = {
  telNoAnsweredCount: {
    name: '客户呼入队列未接通数',
    index: 0,
    color: 'rgba(227, 103, 61, 1)',
    colorStart: 'rgba(227, 103, 61, 1)',
    colorStop: 'rgba(252, 70, 107, 1)'
  },
  emptyCount: {
    name: '排队无可用坐席溢出数',
    index: 1,
    color: 'rgba(239, 217, 171, 1)',
    colorStart: 'rgba(239, 217, 171, 1)',
    colorStop: 'rgba(221, 145, 123, 1)'
  },
  timeoutCount: {
    name: '排队超时溢出数',
    index: 2,
    color: 'rgba(2, 164, 255, 1)',
    colorStart: 'rgba(2, 164, 255, 1)',
    colorStop: 'rgba(5, 125, 210, 1)'
  },
  joinEmptyCount: {
    name: '进队列前无座席溢出数',
    index: 3,
    color: 'rgba(19, 251, 157, 1)',
    colorStart: 'rgba(250, 112, 170, 1)',
    colorStop: 'rgba(102, 27, 221, 1)'
  }
}
  • 最后,在series中进行调用即可。这样不仅柱子是渐变色,而且每个图例也会自动变成渐变色。

在series数组中的四个对象,就解决了多数值柱子的问题。相信看的仔细的同学也发现了柱子带圆角的设置位置(borderRadius: [5, 5, 0, 0], // 带圆角的柱子设置)。

五、总结

到此这篇关于基于vue+echarts实现柱状图渐变色效果(每个柱子颜色不同)的文章就介绍到这了,更多相关vue+echarts柱状图渐变色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • uni-app无限级树形组件简单实现代码

    uni-app无限级树形组件简单实现代码

    文章介绍了如何在uni-app中简单封装一个无限级树形组件,该组件可以无线嵌套,展开和收缩,并获取子节点数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-01-01
  • el-radio-group中的area-hidden报错的问题解决

    el-radio-group中的area-hidden报错的问题解决

    本文主要介绍了el-radio-group中的area-hidden报错的问题解决,下面就来介绍几种解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Vue2.0实现自适应分辨率

    Vue2.0实现自适应分辨率

    这篇文章主要为大家详细介绍了Vue2.0实现自适应分辨率,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • vue3项目中配置sass,vite报错Undefined mixin问题

    vue3项目中配置sass,vite报错Undefined mixin问题

    这篇文章主要介绍了vue3项目中配置sass,vite报错Undefined mixin问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • vue+Element实现搜索关键字高亮功能

    vue+Element实现搜索关键字高亮功能

    这篇文章主要为大家详细介绍了vue+Element实现搜索关键字高亮功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Vue中使用Ueditor的示例详解

    Vue中使用Ueditor的示例详解

    这篇文章主要介绍了Vue中使用Ueditor的方法,本文通过实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Vuex(多组件数据共享的Vue插件)搭建与使用

    Vuex(多组件数据共享的Vue插件)搭建与使用

    Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据的共享,数据缓存等等,下面这篇文章主要给大家介绍了关于Vuex(多组件数据共享的Vue插件)搭建与使用的相关资料,需要的朋友可以参考下
    2022-10-10
  • vue结合el-upload实现腾讯云视频上传功能

    vue结合el-upload实现腾讯云视频上传功能

    这篇文章主要介绍了vue结合el-upload实现腾讯云视频上传功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Vue首页界面加载优化实现方法详解

    Vue首页界面加载优化实现方法详解

    如果你也遇到在 vue 应用中,首页加载资源过多,导致加载缓慢的问题,下面的方法也许能帮到你,主要的处理思想是:让首页多余的资源能在需要它的时候再加载
    2022-09-09
  • Vue.js实现一个自定义分页组件vue-paginaiton

    Vue.js实现一个自定义分页组件vue-paginaiton

    这篇文章主要为大家详细介绍了Vue.js实现一个自定义分页组件vue-paginaiton的具体代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论