ECharts多Y軸 曲線(轉載)
轉載來源:https://my.oschina.net/wangmengjun/blog/909546
本文主要向大家展示一下,如何一步步完成ECharts多Y軸的探索,並給出例項和說明。
一個多Y軸圖表展示的示例圖如下:
什麼是ECharts
ECharts,一個純 Javascript 的圖表庫,可以流暢的執行在 PC 和移動裝置上,相容當前絕大部分瀏覽器(IE8/9/10/11,Chrome,Firefox,Safari等),底層依賴輕量級的 Canvas 類庫ZRender,提供直觀,生動,可互動,可高度個性化定製的資料視覺化圖表。
ECharts 提供了常規的折線圖,柱狀圖,散點圖,餅圖,K線圖
,
更多介紹可以參考百度ECharts官網介紹【ECharts官網連結】
ECharts單Y軸圖表示例
引入ECharts
將下載的echarts.min.js檔案,使用<script>標籤引入。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 引入 ECharts 檔案 -->
<script src="echarts.min.js"></script>
</head>
</html>
指定圖形展示區域
<body>
<!-- 為ECharts準備一個具備大小(寬高)的Dom -->
<div id="main" style="height: 500px; width: 1200px"></div>
</body>
初始化echarts例項
// 基於準備好的dom,初始化echarts例項
var myChart = echarts.init(document.getElementById('main'));
指定配置項和資料
// 指定圖表的配置項和資料
option = {
tooltip : {
trigger : 'axis'
},
grid : {
right : '20%'
},
toolbox : {
feature : {
dataView : {
show : false,
readOnly : false
},
restore : {
show : false
},
saveAsImage : {
show : false
}
}
},
legend : {
data : [ '裝置新增數量' ]
},
xAxis : [ {
type : 'category',
axisTick : {
alignWithLabel : false
},
data : [ '2016-01', '2016-02', '2016-03', '2016-04', '2016-05',
'2016-06', '2016-07', '2016-08', '2016-09', '2016-10',
'2016-11', '2016-12' ]
} ],
yAxis : [ {
type : 'value',
name : '裝置新增數量',
min : 0,
max : 11000,
position : 'left',
axisLine : {
lineStyle : {}
},
axisLabel : {
formatter : '{value}'
}
} ],
series : [ {
name : '裝置新增數量',
type : 'bar',
data : [ 10000, 2000, 1065, 3620, 6530, 9510, 2000, 3002, 3580,
5063, 1520, 9000 ]
} ]
};
設定Option顯示圖表
// 使用剛指定的配置項和資料顯示圖表。
myChart.setOption(option);
單Y軸示例程式碼和執行效果
<!DOCTYPE html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>ECharts</title>
</head>
<body>
<!-- 為ECharts準備一個具備大小(寬高)的Dom -->
<div id="main" style="height: 500px; width: 1200px"></div>
<!-- ECharts單檔案引入 -->
<script src="echarts.min.js"></script>
<script type="text/javascript">
// 基於準備好的dom,初始化echarts圖表
var myChart = echarts.init(document.getElementById('main'));
option = {
tooltip : {
trigger : 'axis'
},
grid : {
right : '20%'
},
toolbox : {
feature : {
dataView : {
show : false,
readOnly : false
},
restore : {
show : false
},
saveAsImage : {
show : false
}
}
},
legend : {
data : [ '裝置新增數量' ]
},
xAxis : [ {
type : 'category',
axisTick : {
alignWithLabel : false
},
data : [ '2016-01', '2016-02', '2016-03', '2016-04', '2016-05',
'2016-06', '2016-07', '2016-08', '2016-09', '2016-10',
'2016-11', '2016-12' ]
} ],
yAxis : [ {
type : 'value',
name : '裝置新增數量',
min : 0,
max : 11000,
position : 'left',
axisLine : {
lineStyle : {}
},
axisLabel : {
formatter : '{value}'
}
} ],
series : [ {
name : '裝置新增數量',
type : 'bar',
data : [ 10000, 2000, 1065, 3620, 6530, 9510, 2000, 3002, 3580,
5063, 1520, 9000 ]
} ]
};
// 為echarts物件載入資料
myChart.setOption(option);
</script>
</body>
經過上述幾個步驟,一個使用ECharts完成的單Y軸圖表示例就完成了~
其實,
上述不單單是單Y軸圖表展示的步驟,EChart所有的圖表都可以採用類似的步驟完成~
為什麼要使用多Y軸
在使用多Y軸圖表之前,一個很直接的問題擺在面前,為什麼要使用多Y軸圖表?
在現實的需求中,一個圖表中,可能需要展示多個屬性的資料,比如上述虛構的資料“2016年每月新增裝置數”,可能還在在這個圖表中看到“2016年每月新增產品數”。
那麼問題來了~
假設,一個產品可以有多個裝置,甚至是成千上萬個裝置,那麼,一個可預見的結果就是,產品新增數和裝置新增數不是同一個數量級的。
這個時候,如果使用單Y軸的柱狀圖就會產生問題 --
裝置數圖形較為明顯、而產品數的圖形展示不明顯,幾乎看不到變化,
因為裝置數和產品數不在同一個數量級上。
如,
上述圖表展示的程式碼:
<!DOCTYPE html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>ECharts</title>
</head>
<body>
<!-- 為ECharts準備一個具備大小(寬高)的Dom -->
<div id="main" style="height: 500px; width: 1200px"></div>
<!-- ECharts單檔案引入 -->
<script src="echarts.min.js"></script>
<script type="text/javascript">
// 基於準備好的dom,初始化echarts圖表
var myChart = echarts.init(document.getElementById('main'));
option = {
tooltip : {
trigger : 'axis'
},
toolbox : {
show: true,
feature : {
dataView : {
show : false,
readOnly : false
},
restore : {
show : false
},
saveAsImage : {
show : false
}
}
},
legend : {
data : [ '裝置新增數量','產品新增數量' ]
},
xAxis : {
type : 'category',
data : [ '2016-01', '2016-02', '2016-03', '2016-04', '2016-05',
'2016-06', '2016-07', '2016-08', '2016-09', '2016-10',
'2016-11', '2016-12' ]
} ,
yAxis : {
type: 'value'
},
series : [
{
name : '裝置新增數量',
type : 'bar',
data : [ 10000, 2000, 1065, 3620, 6530, 9510, 2000,
3002, 3580, 5063, 1520, 9000 ]
},
{
name : '產品新增數量',
type : 'bar',
data : [ 10, 50, 100, 32, 56, 87, 41, 25, 46, 96, 30,
150 ]
} ]
};
// 為echarts物件載入資料
myChart.setOption(option);
</script>
</body>
為了解決這個問題,咱們可以展示兩個Y軸,分別表示裝置數和產品數即可。
實現多Y軸功能
修改option內容
為了在單Y軸的基礎上,實現多個Y軸,只需要修改option中的三個選項內容即可
- 修改legend屬性
legend中的data屬性是一個數組,如果需要多個y軸,則指定多個名稱即可。如下示例,展示兩個Y軸
注,data中的名字要和yAxis以及serials中的name保持一致~
legend : {
data : [ '裝置新增數量','產品新增數量' ]
},
- 修改yAxis
yAxis是一個數組,如果需要多個y軸,則指定多個元素,每個元素使用{}括起來~, 如下示例展示兩個Y軸
注:
position表示的是Y周的位置,如left,則表明放在左邊,right表明放在右邊。
一般採用左邊一個Y軸,右邊一個或者多個Y軸展示的方式。
如果是右邊是多個,那麼需要新增offset 屬性,防止不同的Y軸重疊~ offset的值越大,越往右~
yAxis : [ {
type : 'value',
name : '裝置新增數量',
min : 0,
max : 11000,
position : 'left',
axisLine : {
lineStyle : {}
},
axisLabel : {
formatter : '{value}'
}
}, {
type : 'value',
name : '產品新增數量',
min : 0,
max : 200,
position : 'right',
axisLine : {
lineStyle : {}
},
axisLabel : {
formatter : '{value}'
}
} ]
- 修改serials
yAxis是一個數組,如果需要多個y軸,則指定多個元素,每個元素使用{}括起來~, 如下示例展示兩個Y軸。
type指定不同的圖表展示,如bar表示柱狀圖,line表示折線圖等
series : [
{
name : '裝置新增數量',
type : 'bar',
data : [ 10000, 2000, 1065, 3620, 6530, 9510, 2000,
3002, 3580, 5063, 1520, 9000 ]
},
{
name : '產品新增數量',
type : 'bar',
yAxisIndex : 1,
data : [ 10, 50, 100, 32, 56, 87, 41, 25, 46, 96, 30,
150 ]
} ]
通過這些操作,咱們就可以展示多個Y軸的圖示展示了~
接下來,本文會給出兩Y軸、3Y軸、4Y軸以及5個Y軸的程式碼和效果,從而驗證這種步驟的可行和正確性~
兩個Y軸
示例程式碼
<!DOCTYPE html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>ECharts</title>
</head>
<body>
<!-- 為ECharts準備一個具備大小(寬高)的Dom -->
<div id="main" style="height: 500px; width: 1200px"></div>
<!-- ECharts單檔案引入 -->
<script src="echarts.min.js"></script>
<script type="text/javascript">
// 基於準備好的dom,初始化echarts圖表
var myChart = echarts.init(document.getElementById('main'));
option = {
tooltip : {
trigger : 'axis'
},
grid : {
right : '20%'
},
toolbox : {
feature : {
dataView : {
show : false,
readOnly : false
},
restore : {
show : false
},
saveAsImage : {
show : false
}
}
},
legend : {
data : [ '裝置新增數量', '產品新增數量' ]
},
xAxis : [ {
type : 'category',
axisTick : {
alignWithLabel : false
},
data : [ '2016-01', '2016-02', '2016-03', '2016-04', '2016-05',
'2016-06', '2016-07', '2016-08', '2016-09', '2016-10',
'2016-11', '2016-12' ]
} ],
yAxis : [ {
type : 'value',
name : '裝置新增數量',
min : 0,
max : 11000,
position : 'left',
axisLine : {
lineStyle : {}
},
axisLabel : {
formatter : '{value}'
}
}, {
type : 'value',
name : '產品新增數量',
min : 0,
max : 200,
position : 'right',
axisLine : {
lineStyle : {}
},
axisLabel : {
formatter : '{value}'
}
} ],
series : [
{
name : '裝置新增數量',
type : 'bar',
data : [ 10000, 2000, 1065, 3620, 6530, 9510, 2000,
3002, 3580, 5063, 1520, 9000 ]
},
{
name : '產品新增數量',
type : 'bar',
yAxisIndex : 1,
data : [ 10, 50, 100, 32, 56, 87, 41, 25, 46, 96, 30,
150 ]
} ]
};
// 為echarts物件載入資料
myChart.setOption(option);
</script>
</body>
效果
三個Y軸
示例程式碼
<!DOCTYPE html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>ECharts</title>
</head>
<body>
<!-- 為ECharts準備一個具備大小(寬高)的Dom -->
<div id="main" style="height: 500px; width: 1200px"></div>
<!-- ECharts單檔案引入 -->
<script src="echarts.min.js"></script>
<script type="text/javascript">
// 基於準備好的dom,初始化echarts圖表
var myChart = echarts.init(document.getElementById('main'));
var colors = [ '#5793f3', '#d14a61', '#675bba' ];
option = {
color : colors,
tooltip : {
trigger : 'axis'
},
grid : {
right : '20%'
},
toolbox : {
feature : {
dataView : {
show : false,
readOnly : false
},
restore : {
show : false
},
saveAsImage : {
show : false
}
}
},
legend : {
data : [ '裝置新增數量', '產品新增數量', '廠商新增數量' ]
},
xAxis : [ {
type : 'category',
axisTick : {
alignWithLabel : false
},
data : [ '2016-01', '2016-02', '2016-03', '2016-04', '2016-05',
'2016-06', '2016-07', '2016-08', '2016-09', '2016-10',
'2016-11', '2016-12' ]
} ],
yAxis : [ {
type : 'value',
name : '裝置新增數量',
min : 0,
max : 11000,
position : 'left',
axisLine : {
lineStyle : {
color : colors[2]
}
},
axisLabel : {
formatter : '{value}'
}
}, {
type : 'value',
name : '產品新增數量',
min : 0,
max : 200,
position : 'right',
axisLine : {
lineStyle : {
color : colors[0]
}
},
axisLabel : {
formatter : '{value}'
}
}, {
type : 'value',
name : '廠商新增數量',
min : 0,
max : 200,
position : 'right',
offset : 80,
axisLine : {
lineStyle : {
color : colors[1]
}
},
axisLabel : {
formatter : '{value}'
}
} ],
series : [
{
name : '裝置新增數量',
type : 'bar',
data : [ 10000, 2000, 1065, 3620