慕课网 Echarts3.0入门基础与实战 授课:蜗牛老湿
http://www.imooc.com/view/687
一.浏览器画图原理简介
1.Canvas
基于像素,单个html,类似于画笔在画布上画画,详情可见html5中的canvas介绍。Echarts基于canvas画图。
以下是一个canvas的简单例子,html中
js中
//获取Canvas对象(画布)
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
//开始一个新的绘制路径
ctx.beginPath();
//设置弧线的颜色为蓝色
ctx.strokeStyle = "blue";
var circle = {
x : 100, //圆心的x轴坐标值
y : 100, //圆心的y轴坐标值
r : 50 //圆的半径
};
//沿着坐标点(100,100)为圆心、半径为50px的圆的顺时针方向绘制弧线
ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, false);
//按照指定的路径绘制弧线
ctx.stroke();
运行结果:
2.Svg
基于对象模型,多个图形元素,高保真
svg例子
运行结果:
常见图形组件
- 标题、工具栏、图例、提示框
- 坐标轴:x轴、y轴
echart官网上主要看看它的配置项手册,它对每一个参数都做了详细的描述
http://www.echartsjs.com/option.html#title
还有它的官方实例 http://www.echartsjs.com/examples/
二.Echarts 库简介
1.简单的柱状图,折线图示例
在http://www.echartsjs.com/download.html链接里下载完整版,echats.min.js,然后引入到html文件中就可以使用了,以下是一个简单的直方图例子。
在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图
bar
运行结果:
以下是一个简单的折线图例子
line
标题组件title
http://www.echartsjs.com/option.html#title
标题负责显示整个图表的标题,主要配置option下的title
title: {
show:true,
text: 'ECharts 入门示例', //标题文字
subtext:'学习ECharts就来慕课网', //子标题
left:'right', //标题位置( 数字就是像素值 ,也可以是 center left right这种值)
borderColor:'red', //边框颜色
borderWidth:5, //边框宽度
textStyle:{
fontSize:40
}
},
工具箱组件
http://www.echartsjs.com/option.html#toolbox
组件的工具栏
toolbox: {
show: true, //是否显示
feature: {
dataView:{
show:true
}, //数据视图
restore:{
show:true
}, //还原
dataZoom:{
show:true
}, //缩放视图
saveAsImage: {
show: true
}, //保存图片
magicType: {
type: ['line', 'bar']
} //动态类型切换
}//具体需要显示的功能
},
弹窗组件
http://www.echartsjs.com/option.html#tooltip
tooltip: {
show:true, //是否显示
trigger: 'axis' //触发类型为x轴触发
},
标记线和标记点markline markpoint
http://www.echartsjs.com/option.html#series-line.markLine
最大值,最小值 平均值的标记线
series: [{
name: '销量',
type: 'line',
data: [5, 20, 36, 10, 10, 20],
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值',symbol:'arrow'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
}
}]
三.Echar常用图
饼图
饼图展示数据的特点一般表示数据占全局的百分比,type为pie,重要的需要设置的属性如下
- Center 圆心坐标
- Radius 半径
- Name 图例名字
- selectedMode 是否支持多选
html中
js中,与折线图不同的是,series中,type为pie表示饼图;radius指的是饼图的半径,其数组的第一个参数是内圆半径,第二个参数为外圆半径,50%表示容器高宽中较小一项的 50% 长度;center为饼图的圆心坐标,第一个参数为横坐标,第二个参数为纵坐标。
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
option = {
tooltip: {
trigger: 'item',
formatter: "{a}
{b}: {c} ({d}%)"
},
legend: {
orient: 'vertical',
x: 'left',
data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
},
series: [
{
name:'访问来源',
type:'pie', //图表为饼图
radius: ['50%', '70%'], //饼图的半径
center: ['50%', '50%'], //饼图的圆心位置
avoidLabelOverlap: false,
label: {
normal: {
show: false,
position: 'center'
},
emphasis: {
show: true,
textStyle: {
fontSize: '30',
fontWeight: 'bold'
}
}
},
labelLine: {
normal: {
show: false
}
},
data:[
{value:335, name:'直接访问'},//这里的name必须和legend(图例)中的data一一对应
{value:310, name:'邮件营销'},
{value:234, name:'联盟广告'},
{value:135, name:'视频广告'},
{value:1548, name:'搜索引擎'}
]
}
]
};
运行结果如下
仪表盘
省略
地图
该数据可以去官网的实例拷贝,由于代码太长省略部分数据。geoCoordMap表示各个城市的经纬度,data是每个城市说对应的图表想要表达的数据,
var data = [ //具体数据
{name: '海门', value: 9},
{name: '鄂尔多斯', value: 12},
..................//此处数据省略
];
var geoCoordMap = { //地理坐标图
'海门':[121.15,31.89],
'鄂尔多斯':[109.781327,39.608266],
..................//此处数据省略
};
var convertData = function (data) {
var res = [];
for (var i = 0; i < data.length; i++) {
var geoCoord = geoCoordMap[data[i].name];
if (geoCoord) {
res.push({
name: data[i].name,
value: geoCoord.concat(data[i].value)
});
}
}
return res;
};
//上面的函数处理过后的数据
// convertData = [
// {
// name: '海门',
// value: [121.15, 31.89, 9],
// },
// {
// name: "鄂尔多斯",
// value: [109.781327, 39.608266, 12]
// }
// ..................//此处数据省略
// ];
function renderItem(params, api) {
var coords = [
[116.7,39.53],
[103.73,36.03],
[112.91,27.87],
[120.65,28.01],
[119.57,39.95]
];
var points = [];
for (var i = 0; i < coords.length; i++) {
points.push(api.coord(coords[i]));
}
var color = api.visual('color');
return {
type: 'polygon',
shape: {
points: echarts.graphic.clipPointsByRect(points, {
x: params.coordSys.x,
y: params.coordSys.y,
width: params.coordSys.width,
height: params.coordSys.height
})
},
style: api.style({
fill: color,
stroke: echarts.color.lift(color)
})
};
}
option = {
// backgroundColor: '#404a59',
title: {
text: '全国主要城市空气质量',
subtext: 'data from PM25.in',
sublink: 'http://www.pm25.in',
left: 'center',
textStyle: {
color: '#fff'
}
},
tooltip : {
trigger: 'item'
},
bmap: {
center: [104.114129, 37.550339],
zoom: 5,
roam: true,
mapStyle: {
styleJson: [
{
"featureType": "water",
"elementType": "all",
"stylers": {
"color": "#044161"
}
},
{
"featureType": "land",
"elementType": "all",
"stylers": {
"color": "#004981"
}
},
{
"featureType": "boundary",
"elementType": "geometry",
"stylers": {
"color": "#064f85"
}
},
{
"featureType": "railway",
"elementType": "all",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "highway",
"elementType": "geometry",
"stylers": {
"color": "#004981"
}
},
{
"featureType": "highway",
"elementType": "geometry.fill",
"stylers": {
"color": "#005b96",
"lightness": 1
}
},
{
"featureType": "highway",
"elementType": "labels",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "arterial",
"elementType": "geometry",
"stylers": {
"color": "#004981"
}
},
{
"featureType": "arterial",
"elementType": "geometry.fill",
"stylers": {
"color": "#00508b"
}
},
{
"featureType": "poi",
"elementType": "all",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "green",
"elementType": "all",
"stylers": {
"color": "#056197",
"visibility": "off"
}
},
{
"featureType": "subway",
"elementType": "all",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "manmade",
"elementType": "all",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "local",
"elementType": "all",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "arterial",
"elementType": "labels",
"stylers": {
"visibility": "off"
}
},
{
"featureType": "boundary",
"elementType": "geometry.fill",
"stylers": {
"color": "#029fd4"
}
},
{
"featureType": "building",
"elementType": "all",
"stylers": {
"color": "#1a5787"
}
},
{
"featureType": "label",
"elementType": "all",
"stylers": {
"visibility": "off"
}
}
]
}
},
series : [ //系列列表
{
name: 'pm2.5', //系列名称,用于图例筛选,tooltip显示
type: 'scatter', //散点(气泡)图
coordinateSystem: 'bmap',//该系列使用的坐标系
data: convertData(data),
symbolSize: function (val) { //标记的大小
return val[2] / 10;
},
label: { //图形上的文本标签
normal: {
formatter: '{b}',
position: 'right',
show: false
},
emphasis: { //高亮的图形和标签样式
show: true
}
},
itemStyle: {
normal: {
color: '#ddb926'
}
}
},
{
name: 'Top 5',
type: 'effectScatter',//带有涟漪特效动画的散点(气泡)图
coordinateSystem: 'bmap',
data: convertData(data.sort(function (a, b) {
return b.value - a.value;
}).slice(0, 6)),
symbolSize: function (val) {
return val[2] / 10;
},
showEffectOn: 'emphasis',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
label: {
normal: {
formatter: '{b}',
position: 'right',
show: true
}
},
itemStyle: {
normal: {
color: '#f4e925',
shadowBlur: 10,
shadowColor: '#333'
}
},
zlevel: 1
},
{
type: 'custom',//自定义系列
coordinateSystem: 'bmap',
renderItem: renderItem,
itemStyle: {
normal: {
opacity: 0.5
}
},
animation: false,
silent: true,
data: [0],
z: -10
}
]
};
四.Echart中级使用
多个坐标轴
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
option = {
tooltip: {
trigger: 'axis'
},
toolbox: {
feature: {
dataView: {show: true, readOnly: false},
magicType: {show: true, type: ['line', 'bar']},
restore: {show: true},
saveAsImage: {show: true}
}
},
legend: {
data:['蒸发量','降水量','平均温度']
},
xAxis: [
{
type: 'category',
data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
}
],
yAxis: [
{
type: 'value',
name: '水量',
min: 0,
max: 250,
interval: 50,
axisLabel: {
formatter: '{value} ml'
}
},
{
type: 'value',
name: '温度',
min: 0,
max: 25,
interval: 5,
axisLabel: {
formatter: '{value} °C'
}
}
],
series: [
{
name:'蒸发量',
type:'bar',
data:[2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
},
{
name:'降水量',
type:'bar',
data:[2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
},
{
name:'平均温度',
type:'line',
yAxisIndex: 1,
data:[2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);