赞
踩
可以根据条件获取数据并渲染成图层
图层可以叠加
图层可以转成表格并支持导出
图层可以柱状图和折线图相互转换
折线图的
转换成圆点 自定义
不显示数据上的圆点
改变折线图的折线颜色
效果1
效果2
效果3
效果4
vue ——iview——echarts
话不多少说!
初始化代码
html
<Row style="margin-top: 20px;">
<div id="shouName" ref="dom" style="height: 400px;" v-show="isShow"></div>
<div style="font-weight: 900;text-align:center " v-show="! isShow">暂无数据</div>
</Row>
基本数据初始化
export default { name:'xxx', data() { return { // 自己的其他代码 lineGradient: [ ['#fff', '#6fbae1'], ['#fff', '#90e5e7'], ['#fff', '#fbe289'], ['#fff', '#af17ff'], ['#fff', '#fbb8a1'], ['#fff', '#e58dc2'], ['#fff', '#ffa800'], ['#fff', '#ff000c'], ], histogramGradient: [ ['#fff', '#6fbae1'], ['#fff', '#90e5e7'], ['#fff', '#fbe289'], ['#fff', '#8311BF'], ['#fff', '#fbb8a1'], ['#fff', '#e58dc2'], ['#fff', '#BF7E00'], ['#fff', '#BF0009'], ], option: { title: { text: '', left: 'left' }, tooltip: { trigger: 'axis', axisPointer: { type: 'cross', label: { backgroundColor: '#6a7985' } }, }, grid: { left: '3%', right: '2%', bottom: '3%', containLabel: true }, xAxis: [ { type: 'category', boundaryGap: false, data: [] } ], yAxis: [ { name: '', type: 'value' } ], series: [] } } } }
初始化页面完成后 方法
mounted() { let vm = this this.$nextTick(() => { this.dom = echarts.init(this.$refs.dom) vm.option = { legend: { data: [] }, tooltip: { trigger: 'axis', formatter: function (params) { var htmlStr = '' htmlStr += params[0].name + '<br/>' // x轴的名称 for (let i = 0; i < params.length; i++) { let cood = params[i].color.colorStops[0].color // 取自表格中的颜色 可自定义 htmlStr += '<span style="margin-right:5px;display:inline-block;width:10px;height:10px;border-radius:5px;background-color:' + cood + ';"></span>' // 添加一个汉字,这里你可以格式你的数字或者自定义文本内容 htmlStr += '<span style="margin-left:5px;">' + params[i].seriesName + ':' + '</span>' + ' ' + params[i].value + '<br> ' } htmlStr += '</div>' return htmlStr } }, toolbox: { show: true, right: '60', feature: { // 叠加 myTool3: { show: true, title: '叠加', // 这是自定义图标 来自 阿里图库的图标 icon: 'path://M708.007651 63.983243h-336.012823c-59.251475 0-112.00598 54.377468-112.00598 112.003934l-32.370245 0.783852c-59.249429 0-107.635439 53.594639-107.63544 111.221104v560.021714c0 57.628512 52.754504 112.003933 112.003934 112.003933h420.018075c59.249429 0 112.003933-54.375421 112.003934-112.003933h28.000727c59.251475 0 112.003933-54.375421 112.003934-112.00598V288.663422L708.007651 63.983243z m-56.002479 840.032059H231.98812c-29.401634 0-56.002478-27.493168-56.002478-56.002479V287.992133c0-28.507264 23.969924-55.107085 53.371558-55.107085l30.688953-0.896416v504.018211c0 57.630558 52.754504 112.00598 112.003933 112.00598H708.059839c-0.052189 28.561499-26.710338 56.002478-56.054667 56.002479z m196.00714-168.008459c0 28.508287-26.599821 56.002478-56.002479 56.002479h-420.016029c-29.401634 0-56.004525-27.493168-56.004525-56.002479V175.987177c0-28.506241 26.601868-56.003502 56.004525-56.003502h280.010345c-0.448208 64.514339 0 112.731504 0 112.731504 0 58.187237 52.358485 111.278409 112.003934 111.278409h84.003205v392.013255zM764.009106 287.992133c-29.847795 0-56.002478-54.155411-56.002478-83.277681v-83.890643L848.012312 287.992133h-84.003206z m-334.111521 101.988836c0-8.824993-7.139607-15.96767-15.965623-15.96767s-15.96767 7.141654-15.96767 15.96767v223.375463c0 8.789177 7.141654 15.933901 15.96767 15.933901h350.956164c8.826016 0 19.037589-7.144724 19.079544-15.933901 0-8.81783-10.216689-15.96153-19.037589-15.96153H429.897585v-207.413933z m307.587424 28.529777c-0.453325 0.487094-0.639566 1.085728-1.050935 1.607614l-75.233472 75.232448-76.126818-76.130911c-0.182149-0.222057-0.264013-0.483001-0.448208-0.708128-6.242168-6.245238-16.376992-6.245238-22.626323 0-0.448208 0.487094-0.63138 1.085728-1.043773 1.607614l-86.709851 86.710874c-6.099928 6.094812-6.099928 16.006556 0 22.101367 6.091742 6.095835 15.999392 6.095835 22.095228 0l77.102029-77.140914 74.561159 74.557066c0.559748 0.859577 0.973164 1.834788 1.717108 2.582825 6.093788 6.095835 16.005532 6.095835 22.103414 0l85.622076-85.630263c0.933255-0.632403 1.836835-1.309832 2.65855-2.169409 6.246261-6.242168 6.246261-16.375969 0-22.620183-6.243191-6.245238-16.378016-6.245238-22.620184 0z', onclick: function () { // 自定义处理方法 // 本次使用的是 iview 的Modal (对话框) vm.getItemsAddS() } }, // 这个是下载图片 saveAsImage: { // 这是自定义图标 来自 阿里图库的图标 icon: 'path://M512 785.066667c-8.738133 0-17.476267-3.345067-24.1664-9.966933l-341.333333-341.333333C136.738133 423.936 133.802667 409.326933 139.127467 396.561067 144.384 383.7952 156.8768 375.466667 170.666667 375.466667L341.333333 375.466667 341.333333 68.266667c0-18.8416 15.291733-34.133333 34.133333-34.133333l273.066667 0C667.374933 34.133333 682.666667 49.425067 682.666667 68.266667l0 307.2 170.666667 0c13.789867 0 26.282667 8.328533 31.5392 21.0944s2.321067 27.4432-7.3728 37.205333l-341.333333 341.333333C529.476267 781.7216 520.738133 785.066667 512 785.066667zM253.064533 443.733333 512 702.6688 770.935467 443.733333 648.533333 443.733333C629.691733 443.733333 614.4 428.4416 614.4 409.6L614.4 102.4 409.6 102.4 409.6 409.6c0 18.8416-15.291733 34.133333-34.133333 34.133333L253.064533 443.733333zM989.866667 989.866667l-955.733333 0C15.291733 989.866667 0 974.574933 0 955.733333s15.291733-34.133333 34.133333-34.133333l955.733333 0c18.8416 0 34.133333 15.291733 34.133333 34.133333S1008.708267 989.866667 989.866667 989.866667z' }, // 这是表格 dataView: { readOnly: false, // 这是自定义图标 来自 阿里图库的图标 icon: 'path://M903.873 0H120.127A120.127 120.127 0 0 0 0 120.127v783.746A120.127 120.127 0 0 0 120.127 1024h783.746A120.127 120.127 0 0 0 1024 903.873V120.127A120.127 120.127 0 0 0 903.873 0zM198.126 822.954a61.732 61.732 0 1 1 61.732-61.732 61.732 61.732 0 0 1-61.732 61.732z m0-250.265a61.732 61.732 0 1 1 61.732-61.732 61.732 61.732 0 0 1-61.732 62.566z m0-250.265a61.732 61.732 0 1 1 61.732-60.063 61.732 61.732 0 0 1-61.732 61.732z m654.026 467.578H365.387a35.454 35.454 0 1 1 0-70.49h486.765a35.454 35.454 0 1 1 0 70.49z m0-250.264H365.387a35.454 35.454 0 0 1 0-70.492h486.765a35.454 35.454 0 1 1 0 70.492z m0-250.265H365.387a35.454 35.454 0 1 1 0-70.491h486.765a35.454 35.454 0 1 1 0 70.49z', optionToContent: function (opt) { var axisData = opt.xAxis[0].data // x 周数据 var series = opt.series // y轴数据 var table = '<table style="width:100%;text-align:center;" frame="border;" rules="all"><tbody><tr style="background-color:#d6d8d8">' + '<td >名称1</td>' + '<td style="width: 300px;">名称2</td>' + '<td style="width: 300px;">名称3</td>' + '<td style="width: 200px;">时间4</td>' + '<td>' + '名称5' + '</td>' + '</tr>' for (var i = 0, l = axisData.length; i < l; i++) { // 这里边再次循环,结果 是将多个进行展示 for (let j = 0; j < series.length; j++) { table += '<tr>' + '<td>' +名称对应的数值1 + '</td>' + '<td>' + 名称对应的数值 2+ '</td>' + '<td>' + 名称对应的数值 3+ '</td>' + '<td>' +名称对应的数值4+ '</td>' + '<td>' + 名称对应的数值 5+ '</td>' + '</tr>' } } table += '</tbody></table>' // 可自行略过 此方法作用是 在1800分辨下 表格没有遮挡住图表的头部信息 let nameid = setInterval(function () { let opt = document.getElementById("shouName") if (opt.children[2]) { opt.children[2].style['margin-top'] = '-1px' clearTimeout(nameid) } }, 100) return table }, lang: [' ', '关闭', '导出'], buttonColor: '#2d8cf0', contentToOption: function () { // 将数据装换成表格的方法 自定义吧 // vm.exportData() } }, myTool2: { show: true, title: '折线图', // 这是自定义图标 来自 阿里图库的图标 icon: 'path://M929.28 896 65.28 896 65.28 623.68l184.448-184.448C261.76 444.736 275.072 448 289.28 448s27.456-3.264 39.552-8.768l129.216 129.216C452.48 580.48 449.28 593.856 449.28 608c0 52.992 43.008 96 96 96s96-43.008 96-96c0-14.144-3.264-27.52-8.768-39.552l317.44-317.44c13.824-13.76 13.824-36.096 0-49.92-13.76-13.76-36.096-13.76-49.92 0L581.76 519.296C570.496 514.624 558.208 512 545.28 512S520 514.624 508.736 519.296L377.984 388.48C382.656 377.28 385.28 364.928 385.28 352c0-52.992-43.008-96-96-96s-96 43.008-96 96c0 12.928 2.624 25.28 7.296 36.48L65.28 523.84 65.28 160c0-17.664-14.336-32-32-32s-32 14.336-32 32l0 437.312c-0.832 4.288-0.832 8.576 0 12.864L1.28 928c0 17.664 14.336 32 32 32l896 0c17.664 0 32-14.336 32-32S946.944 896 929.28 896zM545.28 576c17.664 0 32 14.336 32 32S562.944 640 545.28 640s-32-14.336-32-32S527.552 576 545.28 576zM289.28 320c17.664 0 32 14.336 32 32S306.944 384 289.28 384s-32-14.336-32-32S271.552 320 289.28 320z', onclick: function () { // 作用 如果是多个图层,将多个图层都转换的折线、柱状图 (下边一样) let leng = vm.option.series.length for (let i = 0; i < leng; i++) { vm.option.series[i].type = 'line' } vm.typell = 'line' vm.option.legend.data.forEach(item => { item.icon = 'pin' }) vm.dom.setOption(vm.option) } }, myTool1: { show: true, title: '柱状图', // 这是自定义图标 来自 阿里图库的图标 icon: 'path://M930.5 781.7H774.2c0.1-1.4 0.4-2.7 0.4-4V223.9c0-22.4-18.1-40.5-40.5-40.5h-67.8c-22.4 0-40.5 18.1-40.5 40.5v553.7c0 1.4 0.3 2.7 0.4 4h-42.7c0-0.4 0.1-0.8 0.1-1.2V429c0-22.4-18.1-40.5-40.5-40.5h-65c-22.4 0-40.5 18.1-40.5 40.5v351.5c0 0.4 0.1 0.8 0.1 1.2h-47.9V502c0-22.4-18.1-40.5-40.5-40.5h-59.4c-22.4 0-40.5 18.1-40.5 40.5v279.7H93.5c-16.3 0-29.5 13.2-29.5 29.5s13.2 29.5 29.5 29.5h837c16.3 0 29.5-13.2 29.5-29.5 0-16.4-13.2-29.5-29.5-29.5z', onclick: function () { let leng = vm.option.series.length for (let i = 0; i < leng; i++) { vm.option.series[i].type = 'bar' } vm.typell = 'bar' vm.option.legend.data.forEach(item => { item.icon = 'rect' }) vm.dom.setOption(vm.option) } } } }, xAxis: { name: '时间', nameGap: '10', type: 'category', boundaryGap: false, data: [] }, yAxis: [ { // y轴的名称 自定义 vm.uity name: '单位(' + vm.uity + ')', type: 'value' } ], // 图居 顶,左,右,下,的距离 grid: { right: '60', left: '60', top: '50' }, series: [] }, vm.dom.setOption(vm.option) }) },
获取数据并将数据放到 图中
methods:{ showdata(data) { // data 的数据结构为 // 格式1 // { // '2020-20-20 20:20': [1] // } // 格式2 // { // '2020-20-20 20:20': [1,2] // } let vm = this console.log(data) let xdata = new Array() let ydata = new Array() let map = new Array() let list1 = new Array() let TableList = new Array() let legend = new Array() vm.isShow = false // 判断传过来的数据是否为空 if (Object.keys(data).length > 0) { for (var a in data) { xdata.push(a) ydata.push(data[a]) } // 当多个图层叠加 for (let i = 0; i < ydata.[0].length; i++) { let a = new Array() ydata.forEach(item3 => { a.push(item3[i]) }) list1.push(a) } if (list1.length === 1) { // 当是一个图层时,名称是一个值 vm.networkElementType 自定义 TableList.push(vm.networkElementType) } else { // vm.listOfCurrentlyDisplayedLayers 这是获取好的名称集合格式如下 // ['名称1','名称2','名称3','名称4','名称5'] TableList = vm.listOfCurrentlyDisplayedLayers } for (let i = 0; i < list1.length; i++) { let item = list1[i] let opt = { name: TableList[i], stack: TableList[i], type: vm.typell, symbol: 'none', // 这个是不显示圆点 showAllSymbol: false, showSymbol: false, smooth: true, // 折现图圆角弧度 areaStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0.2, 0, 1, [ { offset: 0, // 这是之前定义好的颜色集合 lineGradient 格式如下\ // lineGradient: [ ['#fff', '#6fbae1'], ['#fff', '#90e5e7'] ], color: vm.lineGradient[i][1] }, { offset: 1, color: vm.lineGradient[i][0] } ]) }, }, itemStyle: { normal: { color: new echarts.graphic.LinearGradient(0, 0.2, 0, 1, [ // 这是之前定义好的颜色集合 lineGradient 格式如下\ // histogramGradient: [ ['#fff', '#6fbae1'], ['#fff', '#90e5e7'] ], {offset: 0, color: vm.histogramGradient[i][1]}, // 柱图渐变色 {offset: 1, color: vm.histogramGradient[i][0]} // 柱图渐变色 ] ), lineStyle: { color: vm.histogramGradient[i][1] //改变折线颜色 } } }, data: item, markLine: { data: [ { yAxis: 自定义的一个值, name: '限定值', symbol: 'circle', type: 'average', lineStyle: { // 指示线的样式 虚实和颜色 // type: 'solid', color: 'red', width:'2' } }, { yAxis: 自定义的一个值2, name: '限定值2', symbol: 'circle', type: 'average', lineStyle: { // 指示线的样式 虚实和颜色 // type: 'solid', color: 'red', width:'2' } }, ] }, } map.push(opt) } console.log(map) // 柱状图和折线图 的图标 for (let i = 0; i < TableList.length; i++) { let a = vm.typell === 'line' ? 'pin' : 'rect' legend.push({ name: TableList[i], icon: a, textStyle: { fontWeight: '900', fontSize: '14' } }) } } console.log() vm.dom.clear() vm.option.series = map vm.option.xAxis.data = xdata vm.option.legend.data = legend vm.option.yAxis[0].name = '单位(' + vm.uity + ')' vm.dom.setOption(vm.option) vm.$emit('updatespinShowdata', false) if (ydata.length > 0) { vm.isShow = true } }, }
这段代码 是添加折线图横线(平均值,最大值,等) 如下图
markLine: {
data: [{
yAxis: this.sum,
name: '限定值',
symbol: 'circle',
type: 'average',
lineStyle: { // 指示线的样式 虚实和颜色
// type: 'solid',
color: 'red',
width:'2'
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。