,,ECharts异步加载数据与数据集(dataset)

,,ECharts异步加载数据与数据集(dataset)

本文介绍了ECharts对数据和数据集(dataset)的异步加载,并通过示例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。

目录

数据的异步加载动态更新数据集(dataset)数据到图形的映射视觉通道的映射(颜色、大小等。)互动联动

异步加载数据

ECharts通常在setOption中设置数据。如果需要异步加载数据,可以在异步获取数据后,配合jQuery等工具通过setOption填充数据和配置项。

Json数据:

{

data_pie' : [

{ '值':235,'名称':'视频广告' },

{ '值':274,'名':'联盟广告' },

{ '值':310,'名称':'邮件营销' },

{ '值':335,'名称':'直接访问' },

{ '值':400,'名称':'搜索引擎' }

]

}

例子

var myChart=echarts . init(document . getelementbyid(' main '));

$.get(' https://www . runoob . com/static/js/echarts _ test _ data . JSON ',function (data) {

myChart.setOption({

系列:[

{

名称:“访问源”,

Type: 'pie ',//将图表类型设置为饼图。

Radius: '55% ',//饼图的半径,外半径是可视区域长度的55%(容器高度和宽度中较小的一个)。

数据:data.data_pie

}

]

})

},' json ')

如果异步加载需要一段时间,我们可以添加加载效果,ECharts默认提供了简单的加载动画。只需要调用showLoading方法即可显示。数据加载后,调用hideLoading方法隐藏加载动画:

var myChart=echarts . init(document . getelementbyid(' main '));

mychart . show loading();//打开加载效果

$.get(' https://www . runoob . com/static/js/echarts _ test _ data . JSON ',function (data) {

mychart . hide loading();//隐藏加载效果

myChart.setOption({

系列:[

{

名称:“访问源”,

Type: 'pie ',//将图表类型设置为饼图。

Radius: '55% ',//饼图的半径,外半径是可视区域长度的55%(容器高度和宽度中较小的一个)。

数据:data.data_pie

}

]

})

},' json ')

数据的动态更新

电子海图是由数据驱动的,数据的变化驱动海图显示的变化,所以动态数据的实现变得极其简单。

所有数据更新都是通过setOption实现的。你只需要定期获取数据,setOption填充数据,不管数据发生了什么变化。ECharts会找出两组数据的不同点,然后通过合适的动画展示数据的变化。

var基数=新日期(2014,9,3);

var oneDay=24 * 3600 * 1000

var date=[];

var data=[math . random()* 150];

var now=新日期(基数);

函数addData(shift) {

now=[now.getFullYear(),now.getMonth() 1,now.getDate()]。join('/');

date.push(现在);

data . push((math . random()-0.4)* 10 data[data . length-1]);

if (shift) {

date . shift();

data . shift();

}

now=新日期(新日期(now)one day);

}

for(var I=1;i 100i ) {

add data();

}

选项={

xAxis: {

类型:“类别”,

boundaryGap:假,

数据:日期

},

亚西斯:{

边界差距:[0,' 50%'],

类型:“值”

},

系列:[

{

名称:'交易',

类型:“行”,

顺利:真的,

符号:'无',

堆栈:“a”,

区域样式:{

普通:{}

},

数据:数据

}

]

};

setInterval(function () {

add data(true);

myChart.setOption({

xAxis: {

数据:日期

},

系列:[{

名称:'交易',

数据:数据

}]

});

}, 500);

var myChart=echarts . init(document . getelementbyid(' main '),' dark ');

myChart.setOption(选项);

数据集(dataset)

ECharts使用数据集来管理数据。

Dataset组件用于单独的数据集声明,这样数据可以单独管理,可以被多个组件重用,可以基于数据指定数据到vision的映射。

下面是一个最简单的数据集示例:

选项={

图例:{},

工具提示:{},

数据集:{

//提供一个数据。

来源:[

['产品',' 2015 ',' 2016 ',' 2017'],

【‘抹茶拿铁’,43.3,85.8,93.7】,

['奶茶',83.1,73.4,55.1],

['奶酪可可',86.4,65.2,82.5],

['核桃布朗尼',72.4,53.9,39.1]

]

},

//声明一个x轴,分类轴。默认情况下,分类轴对应于数据集的第一列。

xAxis: {type: 'category'},

//声明一个y轴,数值轴。

yAxis: {},

//声明多个条形系列。默认情况下,每个系列将自动对应数据集的每一列。

系列:[

{type: 'bar'},

{type: 'bar'},

{类型:'条形' }

]

}

或者可以使用对象数组的通用格式:

选项={

图例:{},

工具提示:{},

数据集:{

//此处指定维度名称的顺序,以便可以使用维度到坐标轴的默认映射。

//如果不指定维度,也可以通过指定series.encode来完成映射参见后面。

维度:['产品',' 2015 ',' 2016 ',' 2017'],

来源:[

{产品:'抹茶拿铁',' 2015': 43.3,' 2016': 85.8,' 2017': 93.7},

{产品:'奶茶',' 2015': 83.1,' 2016': 73.4,' 2017': 55.1},

{产品:'奶酪可可',' 2015': 86.4,' 2016': 65.2,' 2017': 82.5},

{产品:'核桃布朗尼',' 2015': 72.4,' 2016': 53.9,' 2017': 39.1}

]

},

xAxis: {type: 'category'},

yAxis: {},

系列:[

{type: 'bar'},

{type: 'bar'},

{类型:'条形' }

]

};

数据到图形的映射

我们可以将数据映射到配置项中的图表。

我可以使用series.seriesLayoutBy属性来配置数据集是按列还是按行映射为图形序列。默认情况下,它按列映射。

在下面的示例中,我们将使用seriesLayoutBy属性来配置数据是按列显示还是按行显示。

选项={

图例:{},

工具提示:{},

数据集:{

来源:[

['产品',' 2012年',' 2013年',' 2014年',' 2015年'],

【‘抹茶拿铁’,41.1,30.4,65.1,53.3】,

['奶茶',86.5,92.1,85.7,83.1],

['奶酪可可',24.1,67.2,79.5,86.4]

]

},

xAxis: [

{类型:“类别”,gridIndex: 0},

{类型:“类别”,gridIndex: 1}

],

亚西斯:[

{gridIndex: 0},

{gridIndex: 1}

],

网格:[

{底部:“55%”},

{最高:' 55%'}

],

系列:[

//这些系列会在第一个直角坐标系中,每个系列对应dataset的每一行。

{type: 'bar ',seriesLayoutBy: 'row'},

{type: 'bar ',seriesLayoutBy: 'row'},

{type: 'bar ',seriesLayoutBy: 'row'},

//这些系列会在第二个直角坐标系中,每个系列对应数据集的每一列。

{type: 'bar ',xAxisIndex: 1,yAxisIndex: 1},

{type: 'bar ',xAxisIndex: 1,yAxisIndex: 1},

{type: 'bar ',xAxisIndex: 1,yAxisIndex: 1},

{type: 'bar ',xAxisIndex: 1,yAxisIndex: 1}

]

}

图表中通常描述的大多数数据都是“二维表格”结构。我们可以使用series.encode属性将相应的数据映射到坐标轴(如X和Y轴):

var选项={

数据集:{

来源:[

['分数','金额','产品'],

[89.3,58212,'抹茶拿铁'],

[57.1,78254,'奶茶'],

[74.4,41032,'奶酪可可'],

[50.1,12755,'奶酪布朗尼'],

[89.7,20145,'抹茶可可'],

[68.1,79146,'茶'],

[19.6,91852,'橙汁'],

[10.6,101852,'柠檬汁'],

[32.7,20112,'核桃布朗尼']

]

},

网格:{containLabel: true},

xAxis: {},

yAxis: {type:'类别' },

系列:[

{

类型:“条形”,

编码:{

//将“amount”列映射到x轴。

x:'金额',

//将“产品”列映射到Y轴。

y:“产品”

}

}

]

};

encode声明的基本结构如下,其中冒号的左边是坐标系,标签和其他特定的名称,如' x ',' y ',' tooltip '等。冒号右边是维度名称(字符串格式)或数据中维度的序列号(数字格式,从0开始计数),可以指定一个或多个维度(使用数组)。通常情况下,以下信息不需要全部写,按需写即可。

encode支持以下属性:

//在任何坐标系和系列中,支持:

编码:{

//使用“维度命名产品”和“维度命名分数”的值显示在工具提示中

工具提示:['产品','分数']

//使用“维度1”和“维度3”的维度名称作为系列名称进行连接。(有时名称很长,这可以避免在系列中重复这些名称。name)

系列名称:[1,3],

//表示使用“维度2”中的值作为id。这在使用setOption动态更新数据时很有用,可以使新旧数据与id对应,从而可以生成适当的数据更新动画。

itemId: 2,

//指定数据项的名称。在饼图等图表中使用“维3”很有用,它可以使该名称出现在图例中。

项目名称:3

}

//直角坐标系(网格/笛卡尔)特有的属性:

编码:{

//将“维度1”、“维度5”和“维度命名分数”映射到X轴:

x: [1,5,'分数'],

//将“维度0”映射到Y轴。

y: 0

}

//单轴独有的属性:

编码:{

单身:3人

}

//极坐标系统(极坐标)唯一属性:

编码:{

半径:3,

角度:2

}

//地理坐标系(geo)特有的属性:

编码:{

液化天然气:3,

纬度:2

}

//对于一些没有坐标系的图表,比如饼状图,漏斗图等。可以是:

编码:{

值:3

}

更多编码示例:

预期寿命-table.json:

[

['收入','预期寿命','人口','国家','年份'],

[815,34.05,351014,'澳大利亚',1800年],

[1314,39,645526,'加拿大',1800年],

[985,32,321675013,'中国',1800年],

[864,32.2,345043,'古巴',1800年],

[1244,36.5731262,977662,'芬兰',1800年],

[1803,33.96717024,29355111,'法国',1800年],

[1639,38.37,22886919,'德国',1800年],

[926,42.84559912,61428,'冰岛',1800],

[1052,25.4424,168574895,《印度》,1800年],

[1050,36.4,30294378,'日本',1800年],

[579,26,4345000,'朝鲜',1800],

[576,25.8,9395000,'韩国',1800],

[658,34.05,100000,'新西兰',1800年]

]

例子

$.get(' https://www . run OOB . com/static/js/life-expectation-table . JSON ',function (data) {

var size value=' 57% ';

var symbolSize=2.5

选项={

图例:{},

工具提示:{},

工具箱:{

左:“中间”,

功能:{

数据缩放:{}

}

},

网格:[

{右:大小值,下:大小值},

{左:大小值,下:大小值},

{右:大小值,上:大小值},

{左:大小值,上:大小值}

],

xAxis: [

{type:'值',gridIndex: 0,name:'收入',axisLabel: {rotate: 50,interval: 0}},

{type: 'category ',gridIndex: 1,name: 'Country ',boundaryGap: false,axisLabel: {rotate: 50,interval: 0}},

{type:'值',gridIndex: 2,name:'收入',axisLabel: {rotate: 50,interval: 0}},

{type: 'value ',gridIndex: 3,name:'预期寿命',axisLabel: {rotate: 50,interval: 0}}

],

亚西斯:[

{type: 'value ',gridIndex: 0,name:'预期寿命' },

{type:'值',gridIndex: 1,name:'收入' },

{type:'值',gridIndex: 2,name:'人口' },

{type: 'value ',gridIndex: 3,name: 'Population'}

],

数据集:{

尺寸:[

收入,

预期寿命,

人口,

国家,

{名称:'年份,类型:'序数' }

],

来源:数据

},

系列:[

{

类型:"散点图",

符号大小:符号大小

xAxisIndex: 0,

yAxisIndex: 0,

编码:{

x:'收入,

y:'预期寿命,

工具提示:[0,1,2,3,4]

}

},

{

类型:"散点图",

符号大小:符号大小

xAxisIndex: 1,

yAxisIndex: 1,

编码:{

x:'国家,

y:'收入,

工具提示:[0,1,2,3,4]

}

},

{

类型:"散点图",

符号大小:符号大小

xAxisIndex: 2,

yAxisIndex: 2,

编码:{

x:'收入,

y:'人口,

工具提示:[0,1,2,3,4]

}

},

{

类型:"散点图",

符号大小:符号大小

xAxisIndex: 3,

yAxisIndex: 3,

编码:{

x:'预期寿命,

y:'人口,

工具提示:[0,1,2,3,4]

}

}

]

};

myChart.setOption(选项);

});

视觉通道(颜色、尺寸等)的映射

我们可以使用视觉地图组件进行视觉通道的映射。

视觉元素可以是:

符号:图元的图形类别符号大小:图元的大小颜色:图元的颜色colorAlpha:图元的颜色的透明度不透明度:图元以及其附属物(如文字标签)的透明度颜色亮度:颜色的明暗度颜色饱和度:颜色的饱和度颜色色调:颜色的色调。

视觉地图组件可以定义多个,从而可以同时对数据中的多个维度进行视觉映射。

定义变量选项={

数据集:{

来源:[

['分数','金额','产品'],

[89.3,58212,'抹茶拿铁'],

[57.1,78254,'奶茶'],

[74.4,41032,'奶酪可可'],

[50.1,12755,'奶酪布朗尼'],

[89.7,20145,'抹茶可可'],

[68.1,79146,'茶'],

[19.6,91852,'橙汁'],

[10.6,101852,'柠檬汁'],

[32.7,20112,'核桃布朗尼]

]

},

网格:{containLabel: true},

xAxis: {name: 'amount'},

yAxis:{类型:'类别' },

视觉图:{

方向:"水平",

左:"中间",

分钟:10,

max: 100,

正文:['高分','低分'],

//将分数列映射到颜色

维度:0,

范围:{

颜色:['#D7DA8B ',' #E15457']

}

},

系列:[

{

类型:"条形",

编码:{

//将"金额"列映射到X轴。

x:'金额,

//将"产品"列映射到Y轴

y:"产品"

}

}

]

};

交互联动

以下实例多个图表共享一个数据集,并带有联动交互:

setTimeout(function () {

选项={

图例:{},

工具提示:{

触发器:"轴",

显示内容:假

},

数据集:{

来源:[

['产品',' 2012 ',' 2013 ',' 2014 ',' 2015 ',' 2016 ',' 2017'],

['抹茶拿铁',41.1,30.4,65.1,53.3,83.8,98.7],

['奶茶',86.5,92.1,85.7,83.1,73.4,55.1],

['奶酪可可',24.1,67.2,79.5,86.4,65.2,82.5],

['核桃布朗尼',55.2,67.1,69.2,72.4,53.9,39.1]

]

},

xAxis: {type: 'category'},

yAxis: {gridIndex: 0},

网格:{顶部:' 55%'},

系列:[

{type: 'line ',smooth: true,seriesLayoutBy: 'row'},

{type: 'line ',smooth: true,seriesLayoutBy: 'row'},

{type: 'line ',smooth: true,seriesLayoutBy: 'row'},

{type: 'line ',smooth: true,seriesLayoutBy: 'row'},

{

类型:"饼图",

id:"馅饼",

半径:"30%",

中心:['50% ',' 25%'],

标签:{

格式化程序:" {b}: {@2012} ({d}%)"

},

编码:{

项目名称:"产品",

值:"2012年",

工具提示:"2012"

}

}

]

};

myChart.on('updateAxisPointer ',函数(事件){

var xAxisInfo=event。ax ESI info[0];

if (xAxisInfo) {

var dimension=xaxisinfo。值1;

myChart.setOption({

系列:{

id:"馅饼",

标签:{

格式化程序:" {b}: {@[' dimension ']} ({d}%)"

},

编码:{

值:维度,

工具提示:尺寸

}

}

});

}

});

myChart.setOption(选项);

});

到此这篇关于埃查尔兹异步加载数据与数据集(数据集)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: