Echarts案例:使用象形柱状图(PictorialBar)实现电池效果柱状图

简介: Echarts案例:使用象形柱状图(PictorialBar)实现电池效果柱状图

分享一个公司项目案例


UI小姐姐给的图是这样的:


2.png


最终实现效果:


1.gif


以下是所有代码


源码:https://gitee.com/DieHunter/myCode/tree/master/Echart/PictorialBar


首先引入Echarts,cdn或npm都行


HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .myChartBox {
            margin: 100px auto;
            width: 450px;
            height: 240px;
            background: #000;
        }
    </style>
    <script src="./data.js"></script>
    <script src="./echarts.js"></script>
    <script src="./myChart.js"></script>
</head>
<body>
    <div id="myChartBox" class="myChartBox"></div>
    <script>
        let _myChart, _option, timer = 1.5,
            timeTickId, colorList, chartConfig; //初始化变量,分别是初始化后的echart对象,echart配置信息,图表刷新频率,延时递归函数id,图表渐变颜色列表了,列表联动配置
        let {
            category,
            lineData
        } = filterData(bookList) //过滤后端数据,规范成x轴数组和y轴数组格式
        let init = () => {
            _myChart = echarts.init(myChartBox); //初始化chart
            colorList = {
                first: ["#F179C4", "#26AEFB", "#CDAD92", "#ED65BA", "#989FBB", "#E86A6A", "#6718CF"],
                second: ["#E33AA3", "#056FAB", "#FFAA62", "#E33AA3", "#28B1FF", "#FFAA62", "#F47384"]
            }
            chartConfig = { //配置信息为,chart中横坐标第一项索引,最后一项索引,规定列表长度
                first: 0,
                second: 7,
                max: 20
            }
            createChart()
        };
        (() => {
            init()
        })()
    </script>
</body>
</html>

data.js(暂存数据)

const bookList = [{
    "typeName": "综合图书",
    "bnum": 28264
}, {
    "typeName": "文学",
    "bnum": 14591
}, {
    "typeName": "儿童文学",
    "bnum": 10186
}, {
    "typeName": "文化教育",
    "bnum": 20477
}, {
    "typeName": "语言文字",
    "bnum": 17344
}, {
    "typeName": "哲学",
    "bnum": 16238
}, {
    "typeName": "历史地理",
    "bnum": 15457
}, {
    "typeName": "政治思想",
    "bnum": 5793
}, {
    "typeName": "生物科学",
    "bnum": 4966
}, {
    "typeName": "绘本",
    "bnum": 4521
}, {
    "typeName": "艺术",
    "bnum": 4157
}, {
    "typeName": "地球天文",
    "bnum": 2545
}, {
    "typeName": "军事",
    "bnum": 2368
}, {
    "typeName": "自然科学",
    "bnum": 2358
}, {
    "typeName": "工业技术",
    "bnum": 1830
}, {
    "typeName": "社会科学",
    "bnum": 1689
}, {
    "typeName": "数理化",
    "bnum": 1394
}, {
    "typeName": "政治法律",
    "bnum": 1303
}, {
    "typeName": "少年百科",
    "bnum": 1201
}, {
    "typeName": "经济",
    "bnum": 923
}, {
    "typeName": "童话故事",
    "bnum": 840
}, {
    "typeName": "环境安全",
    "bnum": 615
}, {
    "typeName": "医药卫生",
    "bnum": 518
}, {
    "typeName": "航空航天",
    "bnum": 457
}, {
    "typeName": "农业科学",
    "bnum": 347
}, {
    "typeName": "家庭教育",
    "bnum": 211
}, {
    "typeName": "交通运输",
    "bnum": 188
}]

myChart.js


let createChart = () => {
    _option = {
        grid: [{ //设置边距
            left: 55,
            bottom: 53,
            top: 20,
            right: 10
        }],
        yAxis: { //Y轴配置
            show: true,
            axisLine: {
                show: false,
                lineStyle: { //隐藏Y轴
                    opacity: 0
                }
            },
            axisTick: { //隐藏刻度
                show: false,
            },
            splitLine: { //隐藏刻度
                show: false,
            },
            axisLabel: { //Y轴文字
                color: '#fff',
                fontSize: 12
            },
        },
        xAxis: { //X轴配置
            data: category, //X轴数据
            show: true,
            axisLabel: { //X轴文字样式
                color: '#a9aabc',
                fontSize: 12,
                interval: 0,
                padding: [10, 0, 0, 0]
            },
            axisLine: {
                show: false
            },
            axisTick: {
                show: false,
            }
        },
        series: [{
            name: '',
            type: 'pictorialBar', //设置类型为象形柱状图
            symbol: 'roundRect', //图形类型,带圆角的矩形
            barWidth: '11%', //柱图宽度
            barMaxWidth: '20%', //最大宽度
            symbolMargin: '3', //图形垂直间隔
            animationDelay: (dataIndex, params) => { //每个图形动画持续时间
                return params.index * 50;
            },
            itemStyle: {
                normal: {
                    color: params => { //图形渐变颜色方法,四个数字分别代表,右,下,左,上,offset表示0%到100%
                        return new echarts.graphic.LinearGradient(
                            1, 1, 0, 0, [{
                                    offset: 0,
                                    color: colorList.first[params.dataIndex]
                                },
                                {
                                    offset: 1,
                                    color: colorList.second[params.dataIndex]
                                }
                            ])
                    }
                }
            },
            z: 1,
            symbolRepeat: true, //图形是否重复
            symbolSize: [25, 6], //图形元素的尺寸
            data: lineData, //Y轴数据
            animationEasing: 'elasticOut' //动画效果
        }]
    }
    timeTick()
}
let disposeChart = () => { //销毁chart
    _myChart.dispose()
    _myChart = null
}
let setOption = () => { //重置数据
    _option.xAxis.data = category.slice(chartConfig.first, chartConfig.second)
    _option.series[0].data = lineData.slice(chartConfig.first, chartConfig.second)
    _myChart.setOption(_option, true)
}
let timeTick = () => { //定时器,最好用延时加递归,如果用setInterval,容易造成堵塞
    if (timeTickId) {
        clearTimeout(timeTickId)
        timeTickId = 0
    }
    autoChangeData()
    timeTickId = setTimeout(timeTick, 1000 * timer || 5000)
}
let autoChangeData = () => { //偏移数组,切换数据
    if (!chartConfig.max) {
        return
    }
    if (chartConfig.second >= chartConfig.max) {
        chartConfig.second = chartConfig.second - chartConfig.first
        chartConfig.first = 0
    } else {
        chartConfig.first++
        chartConfig.second++
    }
    setOption()
}
let filterData = (data, category = [], lineData = []) => { //过滤后端数据,分别变成X轴数组和Y轴数组
    data.forEach(item => {
        item.typeName = item.typeName.length > 2 ? item.typeName.substring(0, 2) : item.typeName
        category.push(item.typeName || '')
        lineData.push(item.bnum || 0)
    })
    return {
        category,
        lineData
    }
}


相关文章
|
2月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
101 1
|
2月前
Echarts——饼图折线图柱状图相互转换
Echarts——饼图折线图柱状图相互转换
97 0
|
4月前
|
数据可视化 数据挖掘
ECharts综合案例一:近七天跑步数据
使用ECharts进行一周跑步数据分析,通过雷达图展示多维度指标(如距离、速度、时间),颜色对比体现个人与平均表现。折线图则清晰显示每日里程趋势,代码示例展示了自定义的`radar`和`line`图表配置。图表交互性强,支持点击高亮,动画流畅,提供完整代码资源。#ECharts #跑步数据 #数据可视化
119 3
ECharts综合案例一:近七天跑步数据
|
4月前
|
数据可视化 数据挖掘
ECharts综合案例一:近七天跑步数据
使用ECharts展示近七天跑步数据,结合雷达图和折线图揭示运动表现。雷达图多维度呈现全程距离、速度和时间,对比平均指标;折线图清晰展示里程趋势。图表具有交互性和动画效果,通过[代码地址](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454698)可获取详情。#ECharts #跑步数据 #数据可视化 #雷达图 #折线图
64 3
ECharts综合案例一:近七天跑步数据
|
4月前
|
数据采集 自然语言处理 数据可视化
ECharts 词云案例四—电影《千与千寻》部分短评
**使用ECharts和电影《千与千寻》短评创建的词云案例展示了数据可视化的力量。通过Python处理评论,提取关键词并计算频率,利用jieba和WordCloud生成词云,ECharts进一步增强了视觉效果。词云突出了角色如“千寻”、“无脸男”及关键词“勇气”、“成长”,揭示了观众的情感共鸣。示例代码和资源可在链接中获取。**
37 0
 ECharts 词云案例四—电影《千与千寻》部分短评
|
4月前
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
102 0
 ECharts 雷达图案例001-自定义节点动画
|
4月前
|
数据可视化 黑灰产治理
📊 ECharts 雷达图案例002 - 诈骗性质分析
**ECharts 案例展示了诈骗性质的雷达图分析,以创新可视化揭示诈骗模式。定制化雷达图配色鲜明,多维度剖析不同诈骗手段,如网络刷单、冒充公检法。交互式设计允许用户深入探究细节。[点击这里](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454384)查看完整案例。#ECharts #数据可视化 #雷达图 #诈骗分析**
43 0
📊 ECharts 雷达图案例002 - 诈骗性质分析
|
4月前
|
数据可视化 前端开发 搜索推荐
ECharts 词云案例三:2024年阅读关键词
探索ECharts词云图进阶,使用蒙版创造个性化2024年阅读关键词云。预览图展示渐变色背景与随机色词汇。蒙版概念引入,通过HTML结构和JavaScript配置实现词云与图像蒙版结合。代码及依赖下载链接提供,展示五种创意蒙版效果,激发数据可视化的创新思维。
37 0
ECharts 词云案例三:2024年阅读关键词
|
4月前
|
搜索推荐 数据可视化 前端开发
ECharts 词云图案例【用户画像】:创意蒙版应用
使用ECharts创建词云图,结合蒙版技术提升可视化创意。通过设置`maskImage`属性,将自定义图像作为词云的外形,如用户画像。案例中详细介绍了HTML结构、ECharts配置及蒙版图像加载过程,鼓励探索SVG路径和CSS样式以实现更多个性化效果。代码和依赖可下载,激发更多数据可视化灵感。
125 0
 ECharts 词云图案例【用户画像】:创意蒙版应用
|
3月前
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
254 0

热门文章

最新文章

下一篇
无影云桌面