漏刻有时数据可视化Echarts组件开发(28):异形柱图、pictorialBar和dataZoom组件的使用

构建容器

javascript 复制代码
 var dom = document.getElementById('container');
        var myChart = echarts.init(dom, null, {
            renderer: 'canvas',
            useDirtyRect: false
        });

模拟数据

javascript 复制代码
    var dataList = [
        {name: '班级一', value: 120, max: 120, min: 20},
        {name: '班级二', value: 183, max: 200, min: 20},
        {name: '班级三', value: 43, max: 300, min: 120},
        {name: '班级四', value: 28, max: 100, min: 20},
        {name: '班级五', value: 56, max: 100, min: 20},
        {name: '班级六', value: 23, max: 100, min: 20},
        {name: '班级七', value: 76, max: 100, min: 20},
        {name: '班级八', value: 67, max: 100, min: 80}
    ];
javascript 复制代码
// 头部数据
        let topData = dataList.map((item) => {
            return {name: '', value: item.max, symbolPosition: 'end', max: item.value, min: item.min};
        });


        // 中间圆片
        let middleCircle = dataList.map((item) => {
            return {name: '', value: item.value, symbolPosition: 'end', max: item.max, min: item.min};
        });

        // 底下圆片
        let bottomCircle = dataList.map((item) => {
            return {name: '', value: item.max, max: item.value, min: item.min};
        });

        // 上边的柱子
        let upBar = dataList.map((item) => {
            return {name: item.name, value: item.max - item.value, value1: item.value, max: item.max, min: item.min};
        });

        // 底部立体柱子
        let bottomBar = dataList.map((item) => {
            return {name: item.name, value: item.value, max: item.max, min: item.min};
        });

配置选项

javascript 复制代码
 var option = {
            title: {
                text: '液位使用率统计图'
            },
            tooltip: {
                trigger: 'item',
                backgroundColor: 'rgba(0,0,0,0.5)',
                borderColor: 'rgba(0,0,0,1)',
                borderWidth: 1,
                padding: 5,
                textStyle: {
                    color: 'rgba(255,255,255,1)',
                    fontSize: 18,
                    width: 300,
                    height: 40
                },
                formatter: '{a} {c}' + '米',
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            grid: {
                bottom: '10%',
                top: '15%',
                right: '3%',
                left: '3%',
                containLabel: true
            },
            dataZoom: [{
                show: true,
                start: 0,
                end: 100,
                type: "inside",
                bottom: 10,
                filterMode: 'empty'
            }],
            xAxis: {
                data: ['班级一', '班级二', '班级三', '班级四', '班级五', '班级六', '班级七', '班级八'],
                axisTick: {
                    show: false
                },
                axisLine: {
                    show: false
                },
                axisLabel: {
                    show: true,
                    textStyle: {
                        color: '#000'
                    },
                    margin: 30 //刻度标签与轴线之间的距离。
                }
            },
            yAxis: {
                type: 'value',
                axisLabel: {
                    formatter: '{value} 米'
                }
            },
            series: [
                {
                    name: '液位总高度',//最上层立体圆
                    type: 'pictorialBar',
                    symbolSize: [120, 45],
                    symbolOffset: [0, -20],
                    z: 12,
                    itemStyle: {
                        color: function (params) {
                            return getBgColor(params.data.max, params.data.min, params.data.value);
                        },
                        opacity: 1
                    },
                    data: topData
                },
                {
                    name: '液位已使用',//中间立体圆
                    type: 'pictorialBar',
                    symbolSize: [120, 42],
                    symbolOffset: [0, -20],
                    itemStyle: {
                        color: function (params) {
                            return getBgColor(params.value, params.data.min, params.data.max);
                        },
                        opacity: 1
                    },
                    z: 12,
                    data: middleCircle
                },
                {
                    name: '液位总高度',//最底部立体圆
                    type: 'pictorialBar',
                    symbolSize: [120, 30],
                    symbolOffset: [0, 16],
                    z: 12,
                    itemStyle: {
                        color: function (params) {
                            return getBgColor(params.data.max, params.data.min, params.data.value);
                        },
                        opacity: 1
                    },
                    data: bottomCircle
                },
                {
                    name: '底部立体柱',
                    stack: '1',
                    type: 'bar',
                    silent: true,
                    barWidth: 120,
                    data: bottomBar,
                    itemStyle: {
                        color: function (params) {
                            return getBgColor(params.data.value, params.data.min, params.data.max);
                        },
                        opacity: .8
                    }
                },
                {
                    name: '上部立体柱',
                    stack: '1',
                    type: 'bar',
                    itemStyle: {
                        color: function (params) {
                            return getBgColor(params.data.value1, params.data.min, params.data.max);
                        },
                        opacity: .4
                    },
                    label: {
                        show: true,
                        position: 'top',
                        distance: 20,
                        color: '#000',
                        fontSize: 20,
                        formatter: function (item) {
                            return parseFloat(((item.data.max - item.data.value) / item.data.max) * 100).toFixed(2) + '%';
                        }
                    },
                    silent: true,
                    barWidth: 120,
                    //barGap: '-100%', // Make series be overlap
                    data: upBar
                }
            ]
        };

自适应窗口

javascript 复制代码
 myChart.setOption(option);
        window.addEventListener("resize", function () {
            myChart.resize();
        });

颜色条件判断封装函数

javascript 复制代码
 //获取背景色;
    function getBgColor(num, min, max) {
        if (num >= max) {
            return 'rgb(255, 70, 131)';//#e60000
        }

        if (num > min && num < max) {
            return '#80FFA5';//#40f453
        }

        if (num <= min) {
            return '#37A2FF';//#16bcfd
        }
    }

dataZoom组件

dataZoom组件是ECharts中的数据区域缩放组件。它可对数轴(axis)进行"数据窗口缩放""数据窗口平移"操作。

dataZoom组件有几种类型,包括内置型(dataZoomInside)、滑动条型(dataZoomSlider)和框选型(dataZoomSelect)。

内置型dataZoom组件内置于坐标系中,用户可以通过鼠标拖拽、鼠标滚轮或手指滑动(触屏上)来缩放或漫游坐标系。

滑动条型dataZoom组件有单独的滑动条,用户在滑动条上进行缩放或漫游。

框选型dataZoom组件提供一个选框进行数据区域缩放。

可以通过dataZoom.xAxisIndex或dataZoom.yAxisIndex来指定dataZoom控制哪个或哪些数轴。dataZoom组件可同时存在多个,起到共同控制的作用。控制同一个数轴的组件,会自动联动。

pictorialBar组件

在ECharts中,pictorialBar组件是一种特殊的条形图,它使用图形和图片来表现数据。具体来说,pictorialBar组件可以使用不同的图形,如圆形、方形等,来表示数据。

这些图形可以按照不同的方式来表现数据,例如,可以使用图形的长度和宽度变形来表现数据的大小。另外,也可以通过改变图形的个数、颜色、透明度等来表现数据的不同特征。

在使用pictorialBar组件时,需要对不同的属性进行设置,如symbol表示要使用的图形类型;symbolSize表示图形的大小;data表示要展示的数据等。

总之,pictorialBar组件是一种非常灵活和强大的数据可视化工具,可以帮助用户更好地理解和分析数据。


@漏刻有时

相关推荐
热爱编程的小曾17 分钟前
sqli-labs靶场 less 8
前端·数据库·less
gongzemin29 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox42 分钟前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
树上有只程序猿1 小时前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼2 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞2 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行2 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_593758102 小时前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox