|
|
<template> <div class="mod-demo-echarts"> <el-alert title="提示:" type="warning" :closable="false"> <div slot-scope="description"> <p class="el-alert__description">1. 此Demo只提供ECharts官方使用文档,入门部署和体验功能。具体使用请参考:http://echarts.baidu.com/index.html</p>
</div> </el-alert>
<el-row :gutter="20"> <el-col :span="24"> <el-card> <div id="J_chartLineBox" class="chart-box"></div> </el-card> </el-col> <el-col :span="24"> <el-card> <div id="J_chartBarBox" class="chart-box"></div> </el-card> </el-col> <el-col :span="12"> <el-card> <div id="J_chartPieBox" class="chart-box"></div> </el-card> </el-col> <el-col :span="12"> <el-card> <div id="J_chartScatterBox" class="chart-box"></div> </el-card> </el-col> </el-row> </div></template>
<script> import echarts from 'echarts' export default { data () { return { chartLine: null, chartBar: null, chartPie: null, chartScatter: null } }, mounted () { this.initChartLine() this.initChartBar() this.initChartPie() this.initChartScatter() }, activated () { // 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug
if (this.chartLine) { this.chartLine.resize() } if (this.chartBar) { this.chartBar.resize() } if (this.chartPie) { this.chartPie.resize() } if (this.chartScatter) { this.chartScatter.resize() } }, methods: { // 折线图
initChartLine () { var option = { 'title': { 'text': '折线图堆叠' }, 'tooltip': { 'trigger': 'axis' }, 'legend': { 'data': [ '邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎' ] }, 'grid': { 'left': '3%', 'right': '4%', 'bottom': '3%', 'containLabel': true }, 'toolbox': { 'feature': { 'saveAsImage': { } } }, 'xAxis': { 'type': 'category', 'boundaryGap': false, 'data': [ '周一', '周二', '周三', '周四', '周五', '周六', '周日' ] }, 'yAxis': { 'type': 'value' }, 'series': [ { 'name': '邮件营销', 'type': 'line', 'stack': '总量', 'data': [ 120, 132, 101, 134, 90, 230, 210 ] }, { 'name': '联盟广告', 'type': 'line', 'stack': '总量', 'data': [ 220, 182, 191, 234, 290, 330, 310 ] }, { 'name': '视频广告', 'type': 'line', 'stack': '总量', 'data': [ 150, 232, 201, 154, 190, 330, 410 ] }, { 'name': '直接访问', 'type': 'line', 'stack': '总量', 'data': [ 320, 332, 301, 334, 390, 330, 320 ] }, { 'name': '搜索引擎', 'type': 'line', 'stack': '总量', 'data': [ 820, 932, 901, 934, 1290, 1330, 1320 ] } ] } this.chartLine = echarts.init(document.getElementById('J_chartLineBox')) this.chartLine.setOption(option) window.addEventListener('resize', () => { this.chartLine.resize() }) }, // 柱状图
initChartBar () { var option = { tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, legend: { data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎', '百度', '谷歌', '必应', '其他'] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: [ { type: 'category', data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] } ], yAxis: [ { type: 'value' } ], series: [ { name: '直接访问', type: 'bar', data: [320, 332, 301, 334, 390, 330, 320] }, { name: '邮件营销', type: 'bar', stack: '广告', data: [120, 132, 101, 134, 90, 230, 210] }, { name: '联盟广告', type: 'bar', stack: '广告', data: [220, 182, 191, 234, 290, 330, 310] }, { name: '视频广告', type: 'bar', stack: '广告', data: [150, 232, 201, 154, 190, 330, 410] }, { name: '搜索引擎', type: 'bar', data: [862, 1018, 964, 1026, 1679, 1600, 1570], markLine: { lineStyle: { normal: { type: 'dashed' } }, data: [ [{ type: 'min' }, { type: 'max' }] ] } }, { name: '百度', type: 'bar', barWidth: 5, stack: '搜索引擎', data: [620, 732, 701, 734, 1090, 1130, 1120] }, { name: '谷歌', type: 'bar', stack: '搜索引擎', data: [120, 132, 101, 134, 290, 230, 220] }, { name: '必应', type: 'bar', stack: '搜索引擎', data: [60, 72, 71, 74, 190, 130, 110] }, { name: '其他', type: 'bar', stack: '搜索引擎', data: [62, 82, 91, 84, 109, 110, 120] } ] } this.chartBar = echarts.init(document.getElementById('J_chartBarBox')) this.chartBar.setOption(option) window.addEventListener('resize', () => { this.chartBar.resize() }) }, // 饼状图
initChartPie () { var option = { backgroundColor: '#2c343c', title: { text: 'Customized Pie', left: 'center', top: 20, textStyle: { color: '#ccc' } }, tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' }, visualMap: { show: false, min: 80, max: 600, inRange: { colorLightness: [0, 1] } }, series: [ { name: '访问来源', type: 'pie', radius: '55%', center: ['50%', '50%'], data: [ { value: 335, name: '直接访问' }, { value: 310, name: '邮件营销' }, { value: 274, name: '联盟广告' }, { value: 235, name: '视频广告' }, { value: 400, name: '搜索引擎' } ].sort(function (a, b) { return a.value - b.value }), roseType: 'radius', label: { normal: { textStyle: { color: 'rgba(255, 255, 255, 0.3)' } } }, labelLine: { normal: { lineStyle: { color: 'rgba(255, 255, 255, 0.3)' }, smooth: 0.2, length: 10, length2: 20 } }, itemStyle: { normal: { color: '#c23531', shadowBlur: 200, shadowColor: 'rgba(0, 0, 0, 0.5)' } }, animationType: 'scale', animationEasing: 'elasticOut', animationDelay: function (idx) { return Math.random() * 200 } } ] } this.chartPie = echarts.init(document.getElementById('J_chartPieBox')) this.chartPie.setOption(option) window.addEventListener('resize', () => { this.chartPie.resize() }) }, // 散点图
initChartScatter () { var option = { backgroundColor: new echarts.graphic.RadialGradient(0.3, 0.3, 0.8, [ { offset: 0, color: '#f7f8fa' }, { offset: 1, color: '#cdd0d5' } ]), title: { text: '1990 与 2015 年各国家人均寿命与 GDP' }, legend: { right: 10, data: ['1990', '2015'] }, xAxis: { splitLine: { lineStyle: { type: 'dashed' } } }, yAxis: { splitLine: { lineStyle: { type: 'dashed' } }, scale: true }, series: [ { name: '1990', data: [ [28604, 77, 17096869, 'Australia', 1990], [31163, 77.4, 27662440, 'Canada', 1990], [1516, 68, 1154605773, 'China', 1990], [13670, 74.7, 10582082, 'Cuba', 1990], [28599, 75, 4986705, 'Finland', 1990], [29476, 77.1, 56943299, 'France', 1990], [31476, 75.4, 78958237, 'Germany', 1990], [28666, 78.1, 254830, 'Iceland', 1990], [1777, 57.7, 870601776, 'India', 1990], [29550, 79.1, 122249285, 'Japan', 1990], [2076, 67.9, 20194354, 'North Korea', 1990], [12087, 72, 42972254, 'South Korea', 1990], [24021, 75.4, 3397534, 'New Zealand', 1990], [43296, 76.8, 4240375, 'Norway', 1990], [10088, 70.8, 38195258, 'Poland', 1990], [19349, 69.6, 147568552, 'Russia', 1990], [10670, 67.3, 53994605, 'Turkey', 1990], [26424, 75.7, 57110117, 'United Kingdom', 1990], [37062, 75.4, 252847810, 'United States', 1990] ], type: 'scatter', symbolSize: function (data) { return Math.sqrt(data[2]) / 5e2 }, label: { emphasis: { show: true, formatter: function (param) { return param.data[3] }, position: 'top' } }, itemStyle: { normal: { shadowBlur: 10, shadowColor: 'rgba(120, 36, 50, 0.5)', shadowOffsetY: 5, color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [ { offset: 0, color: 'rgb(251, 118, 123)' }, { offset: 1, color: 'rgb(204, 46, 72)' } ]) } } }, { name: '2015', data: [ [44056, 81.8, 23968973, 'Australia', 2015], [43294, 81.7, 35939927, 'Canada', 2015], [13334, 76.9, 1376048943, 'China', 2015], [21291, 78.5, 11389562, 'Cuba', 2015], [38923, 80.8, 5503457, 'Finland', 2015], [37599, 81.9, 64395345, 'France', 2015], [44053, 81.1, 80688545, 'Germany', 2015], [42182, 82.8, 329425, 'Iceland', 2015], [5903, 66.8, 1311050527, 'India', 2015], [36162, 83.5, 126573481, 'Japan', 2015], [1390, 71.4, 25155317, 'North Korea', 2015], [34644, 80.7, 50293439, 'South Korea', 2015], [34186, 80.6, 4528526, 'New Zealand', 2015], [64304, 81.6, 5210967, 'Norway', 2015], [24787, 77.3, 38611794, 'Poland', 2015], [23038, 73.13, 143456918, 'Russia', 2015], [19360, 76.5, 78665830, 'Turkey', 2015], [38225, 81.4, 64715810, 'United Kingdom', 2015], [53354, 79.1, 321773631, 'United States', 2015] ], type: 'scatter', symbolSize: function (data) { return Math.sqrt(data[2]) / 5e2 }, label: { emphasis: { show: true, formatter: function (param) { return param.data[3] }, position: 'top' } }, itemStyle: { normal: { shadowBlur: 10, shadowColor: 'rgba(25, 100, 150, 0.5)', shadowOffsetY: 5, color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [ { offset: 0, color: 'rgb(129, 227, 238)' }, { offset: 1, color: 'rgb(25, 183, 207)' } ]) } } } ] } this.chartPie = echarts.init(document.getElementById('J_chartScatterBox')) this.chartPie.setOption(option) window.addEventListener('resize', () => { this.chartPie.resize() }) } } }</script>
<style lang="scss"> .mod-demo-echarts { > .el-alert { margin-bottom: 10px; } > .el-row { margin-top: -10px; margin-bottom: -10px; .el-col { padding-top: 10px; padding-bottom: 10px; } } .chart-box { min-height: 400px; } }</style>
|