Echarts双柱双折线图表

386 阅读4分钟

我正在参加「掘金·启航计划」

前情提要:

甲方客户为了迎接上级领导检查,需要弄出一套看起来高大上的大屏看板。客户内部讨论之后,决定采用下图所示的页面样式来展示

image.png 简单来说就是上面是公司名+公司Logo,左边和右边是产品图,中间是产品数量的柱折图,下面是产品工艺图。 要求柱折图是双柱双折,因为有两个产品。同时折线图和柱状图表示同一个数量。下方产品工艺图要求支持多图轮播。 作为一个前端菜鸟,后端辣鸡的底层程序员,我接到这个需求的一天内,甚至动了辞职的念头。但是身为程序员面对需求直接离职,说出去有点丢人。最终还是没有跑路。

需求分析:

根据客户给出的页面样式,我首先想到的是先利用DIV划分上中下三个区域,再在中区域内划分左中右三个区域。这样一来,就完美符合要求。但是,我尝试了半天以后,页面区域始终不能按照我预期的大小划分。正好我们公司前端框架用的是easyui,直接引用easyui的布局了,懒得自己写DIV了。 布局弄好之后,就是内容填写了。上左右的部分基本不用说了,就是DIV里塞个图片,加个文字,居中一下就好了。难点还是在中间的双柱线图和底下的图片轮播

双柱线图

第一次用echarts,完全不知道从哪写。所以找了一个最普通的柱折图开始拙劣的模仿。随便找一个echarts案例网站,我用的是MCChart (zhangmuchen.top)。 搜索柱折图以后,选一个看起来简单的案例就开始不停的删改里面的数据,弄懂了基本属性后,直接在案例网站测试双柱折图。测试完成后,直接复制到页面中。具体代码如下

option = {
    		    
    		    tooltip: {},
    		    grid: {
    		        top: '8%',
    		        left: '0%',
    		        right: '5%',
    		        bottom: '8%',
    		        containLabel: true,
    		    },
    		    legend: {
    		        itemGap: 50,
    		        data: ['驻车' ,'拨叉','驻车总量','拨叉总量'],
    		        textStyle: {
    		            color: '#f9f9f9',
    		            borderColor: 'white'
    		        },
    		    },
    		    xAxis: [{
    		        type: 'category',
    		        boundaryGap: true,
    		        axisLine: { //坐标轴轴线相关设置。数学上的x轴
    		            show: true,
    		            lineStyle: {
    		                color: '#f9f9f9'
    		            },
    		        },
    		        axisLabel: { //坐标轴刻度标签的相关设置
    		            textStyle: {
    		                color: '#d1e6eb',
    		                margin: 15,
    		            },
    		        },
    		        axisTick: {
    		            show: false,
    		        },
    		        data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月','8月','9月','10月','11月','12月' ],
    		    }],
    		    yAxis: [{
    		        type: 'value',
    		        min: 0,
    		        // max: 140,
    		        splitNumber: 7,
    		        splitLine: {
    		            show: true,
    		            lineStyle: {
    		                color: '#ffffff'
    		            }
    		        },
    		        axisLine: {
    		            show: false,
    		        },
    		        axisLabel: {
    		            margin: 20,
    		            textStyle: {
    		                color: '#d1e6eb',
    		            },
    		        },
    		        axisTick: {
    		            show: false,
    		        },
    		    }],
    		    series: [{
    		        name: '驻车',
    		        type: 'line',
    		        showAllSymbol: true,
    		        symbol: 'emptyCircle',
    		        symbolSize: 6,
    		        lineStyle: {
    		            normal: {
    		                color: "#28ffb3", // 线条颜色
    		            },
    		            borderColor: '#f0f'
    		        },
    		        label: {
    		            show: false,
    		            position: 'top',
    		        },
    		        itemStyle: {
    		            normal: {
    		                color: "#28ffb3",
    		            }
    		        },
    		        tooltip: {
    		            show: false
    		        },
    		        data: zcData
    		    }, {name: '拨叉',
    		        type: 'line',
    		        showAllSymbol: true,
    		        symbol: 'emptyCircle',
    		        symbolSize: 6,
    		        lineStyle: {
    		            normal: {
    		                color: "red", // 线条颜色
    		            },
    		            borderColor: '#f0f'
    		        },
    		        label: {
    		            show: false,
    		            position: 'top',
    		            textStyle: {
    		                color: 'yellow',
    		            }
    		        },
    		        itemStyle: {
    		            normal: {
    		                color: "yellow",

    		            }
    		        },
    		        tooltip: {
    		            show: false
    		        },
    		        data: bcData
    		    },
    		    {
    		        name: '驻车总量',
    		        type: 'bar',
    		        barWidth: 15,
    		        tooltip: {
    		            show: false
    		        },
    		         label: {
    		            show: true,
    		            position: 'top',
    		            textStyle: {
    		                color: '#fff',
    		            }
    		        },
    		        itemStyle: {
    		            normal: {
    		                color: function(params) {
    		                    var colorList = ['#0ec1ff', '#10cdff', '#12daff', '#15ebff', '#17f8ff', '#1cfffb', '#1dfff1'];
    		                    return colorList[params.dataIndex];
    		                }
    		            }
    		        },
    		        data: zcData
    		    },
    		    {
    		        name: '拨叉总量',
    		        type: 'bar',
    		        barWidth: 15,
    		            show: false
    		        },
    		         label: {
    		            show: true,
    		            position: 'top',
    		            textStyle: {
    		                color: 'green',
    		            }
    		        },
    		        itemStyle: {
    		            normal: {
    		                color:"green"
    		            }
    		        },
    		        data: bcData
    		    }]
    		};
    	option && myChart.setOption(option);
图片轮播

图片轮播我使用CSS3的@keyframes来实现的。借鉴的是CSDN中一位博主的思路(css实现轮播图_婷宝_知萌的博客-CSDN博客_css轮播图

在我将完成的看板部署给客户试看的时候,客户提出希望看板的背景是那种宇宙星空图,这样看起来更美观一点,我就继续在easyui中修改整体的背景图。然后我惊喜的发现,我无法通过“style=" background: url('') ;”这种方式去设置整体的背景图片。奇怪的是,我通过这种方式给每个区域添加背景图。 我查阅了大量easyui的文档,才发现原因是easyui划分的区域在初始渲染的时候,是有单独的背景色的。如果需要设置整体的背景色,那么需要将每个区域的背景色透明化。即在style中添加background:transparent;属性,这样整体背景图才不会被区域背景色所掩盖。