本文介绍了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(选项);
});
到此这篇关于埃查尔兹异步加载数据与数据集(数据集)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。