echarts配置option(2)——条形图

echarts配置option(2)——条形图

基本功能概述

本配置使用 ECharts 库创建了一个包含柱状图和动态光效效果的图表。图表的数据来自于一个包含多种功能类型和对应数量的数组。数据经过排序后,用于生成柱状图的高度和类别标签。此外,图表还包含了数据缩放组件,允许用户通过滚动查看全部或部分数据。
在这里插入图片描述

1. 数据准备与排序

var list = [  
    // 数据项,包含功能类型和数量  
];  
  
var ydata = []; // 用于存储Y轴标签(功能类型)  
var seriesdata = []; // 用于存储柱状图数据(数量)  
  
// 对数据进行排序,按照数量从小到大  
list.sort(function (a, b) {  
    return a.count - b.count;  
});  
  
// 遍历排序后的数据,填充ydata和seriesdata  
list.forEach(item => {  
    ydata.push(item.func_type);  
    seriesdata.push(item.count);  
});

2. 响应式设置

var end = 60; // 数据缩放组件的结束位置  
let nowClientWidth = document.documentElement.clientWidth; // 当前页面宽度  
  
// 根据页面宽度调整图表元素大小  
function nowSize(val, initWidth = 1920) {  
    return val * (nowClientWidth / initWidth);  
}

3. ECharts 配置项

var option = {  
    color: ["#5470C6"], // 全局颜色设置  
    tooltip: {  
        trigger: 'axis', // 触发类型为轴触发  
        // formatter: function (val) { return val.value + 'km'; } // 自定义提示框内容(未使用)  
    },  
    grid: {  
        left: '3%', right: 'auto', bottom: '4%', top: '5%', containLabel: true // 图表距离四周的距离  
    },  
    xAxis: {  
        type: 'value', // 数值轴  
        axisTick: { show: false }, // 不显示坐标轴刻度线  
        axisLine: { show: false }, // 不显示坐标轴线  
        axisLabel: { show: false }, // 不显示坐标轴上的文字  
        splitLine: { show: false } // 不显示网格线  
    },  
    dataZoom: [{  
        type: 'inside', // 内置型数据区域缩放组件  
        orient: 'vertical', // 垂直方向  
        start: 100, end: end, // 缩放范围  
        zoomOnMouseWheel: false, // 关闭滚轮缩放  
        moveOnMouseWheel: true, // 开启滚轮平移  
        moveOnMouseMove: true // 鼠标移动能触发数据窗口平移  
    }],  
    yAxis: [{  
        type: 'category', // 类目轴  
        data: ydata, // Y轴标签  
        triggerEvent: true, // 坐标轴的标签是否响应和触发鼠标事件  
        axisTick: { show: false }, // 不显示坐标轴刻度线  
        axisLine: { show: false }, // 不显示坐标轴线  
        splitLine: { show: false }, // 不显示网格线  
        axisLabel: {  
            show: true, color: '#fff', fontSize: nowSize(20) // 显示Y轴标签,设置颜色和字体大小  
        }  
    }, {  
        type: 'category', // 辅助类目轴,用于显示柱体右侧标签  
        axisTick: 'none', axisLine: 'none', show: true,  
        axisLabel: {  
            color: '#fff', fontSize: nowSize(20),  
            formatter: function (value) { return value + ' km'; } // 自定义标签内容  
        },  
        data: seriesdata // 辅助数据,用于显示标签  
    }],  
    series: [  
        {  
            type: 'bar', // 柱状图  
            data: seriesdata, // 柱状图数据  
            barWidth: nowSize(5), // 柱状图条体的粗细  
            itemStyle: {  
                color: new echarts.graphic.LinearGradient(0, 0, 1, 1, [ // 条体渐变颜色  
                    { offset: 0, color: "#28CDFC" },  
                    { offset: 1, color: "#55E9F5" }  
                ])  
            }  
        },  
        {  
            type: 'lines', // 动态光效效果  
            coordinateSystem: 'cartesian2d',  
            data: seriesdata.map((item, index) => ({  
                coords: [[0, index], [item - 50, index]] // 坐标点,用于绘制光效路径  
            })),  
            effect: {  
                show: true, period: 2.5, trailLength: .5, symbolSize: nowSize(5), symbol: "pin", loop: true, color: "rgba(255,255,255,1)" // 光效配置  
            },  
            lineStyle: { width: 0, opacity: 0.6, curveness: 0 }, // 线条样式  
            z: 99 // 图层顺序,确保光效在最上层  
        }  
    ]  
};

详细功能列表

  1. 数据排序:原始数据根据数量进行升序排序。 Y轴标签:提取排序后的功能类型作为Y轴标签。
  2. 柱状图数据:提取排序后的数量作为柱状图的高度。
  3. 响应式设计:根据页面宽度调整图表元素大小,包括字体和柱状图条体的粗细。
  4. 数据缩放:内置型数据区域缩放组件,允许用户滚动查看全部或部分数据。
  5. 柱状图:显示排序后的数据,条体具有渐变颜色。
  6. 动态光效:在柱状图上添加动态光效效果,增强视觉效果。

总结

这段代码定义了一个包含多种电缆设施类型及其数量的列表,对该列表进行了排序,并基于排序后的数据创建了一个ECharts图表配置对象。图表配置包括设置颜色、提示框、网格、坐标轴(其中X轴隐藏,Y轴显示设施类型及经过处理的数值标签,并添加了额外的Y轴用于显示数值及单位)、数据缩放组件以及两个系列(一个条形图系列用于显示数量,另一个线条光效系列用于增强视觉效果)。此外,图表还考虑了响应式设计,通过调整字体大小等属性以适应不同屏幕尺寸。

最后源码

var list = [
        {
          "count":64,
          "func_type": "电缆隧道"
        },
        {
          "count":46,
          "func_type": "电缆排管"
        },
        {
          "count":36,
          "func_type": "电缆桥架"
        },
        {
          "count":75,
          "func_type": "顶管/拖拉管"
        },
        {
          "count": 34,
          "func_type": "电缆沟"
        },
        {
          "count": 64,
          "func_type": "电缆沟"
        },
        {
          "count":35,
          "func_type": "低压线柄"
        },
        {
          "count": 85,
          "func_type": "电缆隧道"
        },
        {
          "count": 24,
          "func_type": "电缆排管"
        },
        {
          "count":85,
          "func_type": "电缆桥架"
        },
        {
          "count":35,
          "func_type": "顶管/拖拉管"
        },
        {
          "count":54,
          "func_type": "电缆沟"
        },
        {
          "count":24,
          "func_type": "电缆沟"
        },
        {
          "count": 34,
          "func_type": "低压线柄"
        },
      ]
      var ydata = []
      var seriesdata = []
      list.sort(function (a, b) {
        return a.count - b.count;
      });
      list.forEach(item => {
        ydata.push(item.func_type)
        seriesdata.push(item.count)
      })
      var end = 60
      let nowClientWidth = document.documentElement.clientWidth;
      function nowSize(val, initWidth = 1920) {
        return val * (nowClientWidth / initWidth);
      }
      option = {
        color: ["#5470C6"],
        tooltip: {
          trigger: 'axis',
          // formatter:function (val) {
          //   return  val.value+'km'
          // }

        },
        grid: {
          left: '3%',
          // right: '4%',
          bottom: '4%',
          top: '5%',
          containLabel: true
        },//图表距离四周的距离
        xAxis: {
          type: 'value',
          axisTick: {
            show: false // 不显示坐标轴刻度线
          },
          axisLine: {
            show: false, // 不显示坐标轴线
          },
          axisLabel: {
            show: false, // 不显示坐标轴上的文字
          },
          splitLine: {
            show: false // 不显示网格线
          },


        },
        dataZoom:[{
          type: 'inside',
          // zoomLock: true,
          orient:'vertical',
          start: 100, // 表示 30% 的位置开始
          end: end, // 表示 70% 的位置结束
          // startValue: 0,
          // endValue: 5,
          zoomOnMouseWheel: false,  // 关闭滚轮缩放
          moveOnMouseWheel: true, // 开启滚轮平移
          moveOnMouseMove: true,  // 鼠标移动能触发数据窗口平移
        }],//数据太多,将图表滚动
        yAxis: [{
          type: 'category',
          data: ydata,
          triggerEvent: true,//坐标轴的标签是否响应和触发鼠标事件,默认不响应。
          axisTick: {
            show: false // 不显示坐标轴刻度线
          },
          axisLine: {
            show: false, // 不显示坐标轴线
          },
          splitLine: {
            show: false // 不显示网格线
          },
          axisLabel: {
            show: true, // 是否显示Y坐标轴上的文字
            color: '#fff',//如背景为白色,设置为其他颜色
            fontSize: nowSize(20),//字体大小
          },
        },
          {
            type: 'category',
            // inverse: true,
            axisTick: 'none',
            axisLine: 'none',
            show: true,
            axisLabel: {
              color: '#fff',//如背景为白色,设置为其他颜色
              fontSize: nowSize(20),
              formatter: function (value) {
                return value + ' km'
              },
            },
            data: seriesdata,
          },//柱体右侧标签
        ],
        series: [

          {
            type: 'bar',
            // showBackground: true,
            // backgroundStyle: {
            //   color: '#273865',
            // },
            data: seriesdata,
            barWidth: nowSize(5),//条形图条体的粗细
            // label: {
            //   show: true, // 显示数值
            //   position: 'right', // 数值显示在右侧
            //   // 可以通过 formatter 自定义显示格式
            //   distance: 15,
            //   formatter: '{c}', // {c} 表示数据值,
            //   textStyle: { // 数值样式
            //     color: '#fff', // 数值颜色
            //     fontWeight: 'bold',
            //     fontSize: '10'
            //   }
            // },
            itemStyle: {
              color: new echarts.graphic.LinearGradient(0, 0, 1, 1, [
                {
                  offset: 0,
                  // color: '#347CDD'
                  // color:'rgba(27, 54, 167, 0.33)'
                  color: "#28CDFC"
                },
                {
                  offset: 1,
                  // color: '#56fb93'
                  // color: 'rgba(226, 87, 69, 1)'
                  color: '#55E9F5'
                }
              ])
            }//条体渐变颜色
          },
          {
            type: 'lines',
            coordinateSystem: 'cartesian2d',
            data: seriesdata.map((item, index) => {
              return {
                coords: [
                  [0, index],
                  [item-50, index]
                ]
              }
            }),
            effect: {
              show: true,
              period: 2.5,
              trailLength: .5,
              symbolSize: nowSize(5),
              symbol: "pin",
              loop: true,
              color: "rgba(255,255,255,1)"
            },
            lineStyle: {
              width: 0,
              opacity: 0.6,
              curveness: 0
            },
            z: 99
          }//条体上的光效效果
        ]
      };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃仙草冻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值