echart高级使用_echarts高级入坑

基本写法

import Vue from 'vue'

import echarts from 'echarts'

import apkCompile from '@/api/map/apkCompile.js'

Vue.use(echarts)

export default {

data () {

return {

chartsObj: {},

// 配置项对象

defaultOption: {

title: {

text: ''

},

tooltip: {

trigger: 'axis'

},

//x轴过长下拉滑动

dataZoom: {

show: true,

start: 30,

end: 70,

maxSpan: 80

// zoomLock: true

},

//控制类目

legend: {

data: [],

selected: {

}

},

//整个echart图在这个容器中的位置

grid: {

left: '3%',

right: '4%',

bottom: '10%',

containLabel: true

},

toolbox: {

},

//x轴

xAxis: [

{ type: 'category',

boundaryGap: false,

data: []

}

],

//~~~~y轴

yAxis: {

name: '%(cpu)',

type: 'value'

},

series: []

}

}

},

mounted () {

//初始化

this.drawECharts()

},

methods: {

drawECharts () {

// 基于准备好的dom,初始化echarts实例

let myChart = echarts.init(document.getElementById('myChart'))

//配置项加入 myChart.setOption(this.defaultOption)

let params = {

apk: 'http://172.22.14.138/output/android_packages_apps_SmartShot/LzE5e9K9c/SystemUI-ard9.0-system_app-2019_11_12_23_48_41-LzE5e9K9c-release.apk',

scriptName: 'SmartShot_rom9.1_hd003'

}

this.$fetch(apkCompile.getCpuChats, params).then(res => {

console.log(res.data)

this.chartsObj = res.data

this.chartsObj.series.forEach((item, index) => {

//series中加上type this.chartsObj.series[index].type = 'line'

})

//对象的结构赋值

let obj = { ...this.defaultOption }

//把接口返回的值赋值给配置项

obj.legend.data = this.chartsObj.legend

obj.xAxis[0].data = this.chartsObj.xaxis

obj.series = this.chartsObj.series

//重新初始化 myChart.setOption(obj)

})

}

}

}

对于X轴类目的名字的控制

设置x轴的名字倾斜

右倾

xAxis: {

type: 'category',

boundaryGap: [0, 0.01],

name: '投标人',

data: [ '' ],

axisLabel:{

interval:0,//横轴信息全部显示

rotate:-30,//-30度角倾斜显示

}

},

左倾

axisLabel: {

interval:0,

rotate:40

}

interval

坐标轴刻度标签的显示间隔(在类目轴中有效哦),默认会采用标签不重叠的方式显示标签(也就是默认会将部分文字显示不全)

可以设置为0强制显示所有标签,如果设置为1,表示隔一个标签显示一个标签,如果为3,表示隔3个标签显示一个标签,以此类推

rotate

标签倾斜的角度,在类目轴的类目标签显示不全时可以通过旋转防止标签重叠(官方这样说的)旋转的角度是-90到90度

问题又来了,这个名称x轴的文字如果太长会受到遮挡,还是显示不全,这个时候可以用grid属性解决

文字垂直显示

axisLabel中使用formatter回调,formatter有两个参数,使用方法是这样的formatter:function(value,index){} ,value是类目,index 是类目索引。

axisLabel: {

interval: 0,

formatter:function(value)

{

return value.split("").join("\n");

}

}

文字竖直这个formatter实在有点太简单化了,所以我们来做一个两个字的加n的换行。formatter如下:

axisLabel: {

interval: 0,

formatter:function(value)

{

debugger

var ret = "";//拼接加\n返回的类目项

var maxLength = 2;//每项显示文字个数

var valLength = value.length;//X轴类目项的文字个数

var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数

if (rowN > 1)//如果类目项的文字大于3,

{

for (var i = 0; i < rowN; i++) {

var temp = "";//每次截取的字符串

var start = i * maxLength;//开始截取的位置

var end = start + maxLength;//结束截取的位置

//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧

temp = value.substring(start, end) + "\n";

ret += temp; //凭借最终的字符串

}

return ret;

}

else {

return value;

}

}

}

X轴类目项隔一个换行(使用formatter中index参数)

都是上面的第二种方法是利用formatter中的value参数实现了文字拼接\n换行的,但是index参数并没有使用,现在我们就一起来使用这两个参数实现隔一个类目项换行。

axisLabel: {

interval: 0,

formatter:function(value,index)

{

debugger

if (index % 2 != 0) {

return '\n\n' + value;

}

else {

return value;

}

}

}

echarts图例legend选中状态动态设置 selected

需要对所有指标的图例默认选中状态只显示前两个,其他指标的图例状态默认为灰色。

//图例配置项

legend: {

x: 'center',

y: 'bottom',

data: $scope.key_value,

selected:{}

},

//js动态加载

var selected_item = {};

for(i =0; i < $scope.key_value.length; i++){

var key_name = $scope.key_value[i];

if(i >1){

selected_item[key_name] = false;

}else{

selected_item[key_name] = true;

}

};

option.legend.selected = selected_item;

//原始写法selected_item.key_name = false; 会报错,原因是: json 解析时 key_name 都按字符串解析,不识别变量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值