共计 3624 个字符,预计需要花费 10 分钟才能阅读完成。
echarts 是一款 js 组件库,能够绘制各种类型的图表数据,功能强大。官网文档 https://echarts.apache.org
上面总结下在 vue2 我的项目中的应用
1.npm 装置 echarts
npm install echarts --S
2. 引入 echarts 的全家桶,在 vue index.html 引入内部 js
// 从 node_modules 中 copy echarts.min.js 到定义的 static_front 目录下 | |
<script src="/static_front/module/echarts/echarts.min.js"></script> |
3. 在 webpack.base.conf 中配置内部组件插件
// 在 externals 选项中配置 | |
externals:{echarts:“echarts”} |
4. 在 main.js 中导入,并定义成全局属性
import * as echarts from 'echarts' | |
// 这两行特地留神:这是绘制中国热力求用,装置最新版 echarts5.3.0 后,并没有 map/json/china.json,我是从 v4.9.0 中复制来的 | |
import china from '@static_front/module/echarts/china.json' | |
echarts.registerMap('china', china) | |
Vue.prototype.$echarts = echarts |
5. 在组件 chart.vue 中绘制图表
// 定义接收图表的容器 | |
<el-row class="div-graphic"> | |
<div style="width:100%;height: 400px;" id="bar"> | |
</div> | |
</el-row> |
// 定义 echarts 实例对象 | |
this.barCharts = this.$echarts.init(document.getElementById("bar")) // 实例 | |
this.barCharts.showLoading(this.chartsLoadingStyle) //loading 显示,定义款式 | |
// 这里能够是 request 交互, 失去 option 须要的数据 | |
this.barCharts.setOption(option) | |
this.barCharts.hideLoading() // 暗藏 loading |
6. 上面看看各个图表的 option 配置
// 柱状图 | |
barOption = {color: ['#3398DB'], // 系列调色板, 色彩列表 | |
title: { // 图形题目 | |
text: title, | |
textStyle:{fontSize:14}, | |
left:25, // 组件离容器左侧的像素值 | |
top:0, | |
}, | |
tooltip: { // 提醒 | |
trigger: 'axis', // 触发类型 item 数据项触发 axis 坐标轴触发 | |
axisPointer : {// 指示器配置项 | |
type : 'shadow' //line 直线指示器 shadow 暗影指示器 | |
} | |
}, | |
grid:{// 网格设置 | |
//left: "9%", // 默认是 10% | |
}, | |
toolbox:{ // 工具箱 | |
show: true, | |
feature:{// 要显示的工具, 除了内置的工具外,还能够自定义 | |
dataView: { // 数据视图 | |
readOnly: true | |
}, | |
magicType: {// 类型切换 | |
type: ["line", "bar"] | |
}, | |
restore: {}, // 还原 | |
saveAsImage: {} // 保留为图片,默认 type=png} | |
}, | |
xAxis: { // x 轴 | |
type: 'category', //category 类目轴 value:数字轴 time:time 轴 log: 对数轴 | |
boundaryGap: true, //true 标签和数据都会在刻度线两头,false: 标签和数据都在刻度线上 | |
data: category, // 类目轴 数据 | |
splitLine:{show:false // 坐标轴在 grid 区域中的分隔线。默认是显示的}, | |
axisLabel:{ // 类目轴标签的斜度和格式化 | |
formatter:function(value){ | |
let rst = value | |
if(value.length >5){rst = value.substring(0,5) + "..." | |
} | |
return rst | |
} | |
}, | |
}, | |
yAxis: { // y 轴 | |
type: 'value', | |
axisLine:{//value 坐标轴轴线设置 | |
show: true, | |
}, | |
axisTick:{ //value 坐标轴刻度设置 | |
show:true | |
} | |
}, | |
series: [{ // 系列 | |
name : this.typeMapping[this.cond.event_type]+'量', // 系列名称,用于 tooltip, legend 时的显示 | |
type : "bar", | |
barWidth: 30, | |
data : data | |
}] | |
} |
// 饼图 | |
pieOption = { | |
title : { | |
text: title, | |
textStyle:{fontSize:14}, | |
left:25, // 组件离容器左侧的像素值 | |
top:0, | |
}, | |
tooltip: { | |
trigger: 'item', | |
formatter: function (params,ticket,callback) { | |
var name = ''; | |
for(var i = 0 ; i < params['name'].length;i++){name += params['name'][i]; | |
if(i > 0 && i % 20 == 0){name += '<br />'} | |
} | |
return params['seriesName'] + '<br />' + name + ':' + params['value'] + '('+params['percent']+'%)' | |
}, | |
}, | |
legend: { // 图例 | |
orient: 'vertical', | |
data: category, | |
left:'62%', | |
top:"10%", | |
formatter:function(value){ | |
var rs = value; | |
if(value.length > 25){rs = value.substring(0,25) + '...' | |
} | |
return rs | |
} | |
}, | |
series: [{ // 系列 | |
name : this.typeMapping[this.cond.event_type] +'量', // 系列名称 | |
type : "pie", | |
top: '5%', | |
radius : '50%', // 饼图的半径 | |
center: ['35%', '50%'],// 中心点 距 x 轴,y 轴的间隔 | |
data : data, | |
minAngle : 1, // 最小扇形的大小,避免值是 0 的扇形看不成成果 | |
label : {// 图形上的标签文字 | |
show : true, | |
formatter: function(param){var rs = param['name']; | |
if(rs.length > 15){rs = rs.substring(0,14) + '...' | |
} | |
return rs | |
}, | |
}, | |
}], | |
} |
// 热力求 | |
mapOption = {color: ['#3398DB'], | |
title : {text: this.typeMapping[this.cond.event_type] + '数据地区散布', | |
textStyle:{fontSize:14}, | |
left:25, // 组件离容器左侧的像素值 | |
top:0, | |
}, | |
tooltip : {trigger: 'item'}, | |
grid: { | |
top: 0, | |
bottom: 0 | |
}, | |
visualMap: { // 视觉映射组件,相当于 echarts4 中的 dataRange, 次要是对地图视觉上的成果设置,比方色彩,定义图元自身的视觉和指标系列的视觉 | |
type: 'continuous', //continuous: 连续型 'piecewise':分段型 | |
left:'15%',// 图元离直坐标系左侧间隔 | |
top:'60%', | |
min: 0, // 图元最大最小值 | |
max: max, | |
text:['高','低'], | |
calculable: true, // 是否显示拖曳用的手柄 | |
realtime: false, // 拖曳过程中是否实时更新 | |
inRange: { // 扭转图元的色彩和指标系列色彩 从 '#DDFDFE' 到 '#006EDD' 逐渐加深 | |
color: ['#DDFDFE', '#006EDD'], | |
//symbolSize: [60, 200] // 是图元大小 | |
} | |
//splitNumber:8 // 被分段的个数,在 type=piecewise 中无效,默认值是 5 | |
}, | |
series : [ | |
{name: this.typeMapping[this.cond.event_type] + '数据地区散布', | |
type: 'map', | |
map: "china", | |
//roam: 'scale', // 开启鼠标缩放 | |
selectedMode : 'multiple', // 选中模式,示意是否反对多个选中 | |
label:{show:true}, // 地图上的 label 是否显示 | |
data: data, | |
} | |
], | |
//animation: false // 是否开启动画 | |
} |
正文完