簡介
ECharts,縮寫來自Enterprise Charts,商業級數據圖表,基於【HTML5】Canvas (ZRender),純Javascript圖表庫,是百度的一個開源的數據可視化工具,業界給予了很多贊譽,這里不多說,需要了解詳情的同學參見官網。我簡略看了下,最貼切的地方在於本地化支持,比如對於中國地圖的支持。
名詞解釋
基本名詞
名詞 | 描述 |
---|---|
chart | 是指一個完整的圖表,如折線圖,餅圖等“基本”圖表類型或由基本圖表組合而成的“混搭”圖表,可能包括坐標軸、圖例等 |
axis | 直角坐標系中的一個坐標軸,坐標軸可分為類目軸和數值軸 |
xAxis | 直角坐標系中的橫軸,通常並默認為類目軸 |
yAxis | 直角坐標系中的縱軸,通常並默認為數值軸 |
grid | 直角坐標系中除坐標軸外的繪圖網格 |
legend | 圖例,表述數據和圖形的關聯 |
dataRange | 值域選擇,常用於展現地域數據時選擇值域范圍 |
dataZoom | 數據區域縮放,常用於展現大數據時選擇可視范圍 |
toolbox | 輔助工具箱,輔助功能,如添加標線,框選縮放等 |
tooltip | 氣泡提示框,常用於展現更詳細的數據 |
timeline | 時間軸,常用於展現同一組數據在時間維度上的多份數據 |
series | 數據系列,一個圖表可能包含多個系列,每一個系列可能包含多個數據 |
圖表名詞
名詞 | 描述 |
---|---|
line | 折線圖,堆積折線圖,區域圖,堆積區域圖。 |
bar | 柱形圖(縱向),堆積柱形圖,條形圖(橫向),堆積條形圖。 |
scatter | 散點圖,氣泡圖。散點圖至少需要橫縱兩個數據,更高維度數據加入時可以映射為顏色或大小,當映射到大小時則為氣泡圖 |
k | K線圖,蠟燭圖。常用於展現股票交易數據。 |
pie | 餅圖,圓環圖。餅圖支持兩種(半徑、面積)南丁格爾玫瑰圖模式。 |
radar | 雷達圖,填充雷達圖。高維度數據展現的常用圖表。 |
chord | 和弦圖。常用於展現關系數據,外層為圓環圖,可體現數據占比關系,內層為各個扇形間相互連接的弦,可體現關系數據 |
force | 力導布局圖。常用於展現復雜關系網絡聚類布局。 |
map | 地圖。內置世界地圖、中國及中國34個省市自治區地圖數據、可通過標准GeoJson擴展地圖類型。支持svg擴展類地圖應用,如室內地圖、運動場、物件構造等。 |
引入Echarts的方式
echarts提供多種引入方式,請根據你的項目類型選擇合適的方式:
1 模塊化包引入
需要注意的是,包引入提供了開發階段最大的靈活性,但並不適合直接上線,減少請求的文件數量是前端性能優化中最基本但很重要的規則,務必在上線時文件的連
接壓縮。
require.config({
packages:[{
name:'echarts',
location:'../js/echarts',
main:'echarts'
},{
name:'zrender',
location:'../js/zrender',//zrender與echarts,在同一級目錄,模塊化包引入
main:'zrender'
}
]
});
首先下載Zrender到本地,和ECharts放在同一目錄下。
在echarts/doc/example/www文件中建立一個HTML文件,所使用的js文件都包含在js文件中。 包含echarts.js、echarts-map.js、esl.js三個,其實只用到兩個,echarts-map.js並不用。
2 模塊化單文件引入(推薦)
如果你使用模塊化開發但並沒有自己的打包合並環境,或者說你不希望在你的項目里引入第三方庫的源文件,我們建議你使用單文件引入,同模塊化包引入一樣,你需要熟悉模塊化開發,這種方式只是我們預先幫你把常用圖表組合連接合並在一起,你只需一個符合AMD規范的加載器,同時引入一個echarts相關js即可。如你所發現的,build文件夾下已經生成了不同組合的多個單文件見下,根據你的需求場景只需要使用其中一個即可:
例子: 在這里我們只是用line圖表,其他的不用,如果你不用的話打包在一起就非常浪費,這時候就可以通過build目錄下的build.js文件來構建一個更加貼身的echarts單文件。 總結來說模塊化如何引入ECharts,你都需要如下4步: 1、引入一個模塊加載器,如esl.js或者require.js 2、為ECharts准備一個具備大小(寬高)的Dom(當然可以是動態生成的) 3、為模塊加載器配置echarts的路徑,從當前頁面鏈接到echarts.js,見上述說明 4、動態加載echarts然后在回調函數中開始使用(容我羅嗦一句,當你確保同一頁面已經加載過echarts,再使用時直接require('echarts').init(dom)就行)
首先下載node下載完成后,安裝好node。 打開build文件夾,看到如下文件:
這里我已經建立了一個新的build01.bat 就是單一生成echarts.js
node build.js optimize=true plain=false exclude=map output=echarts.js
當然也可以在終端里通過命令行參數方式運行 node.js構建腳本。
具體語法:
node build.js optimize=true exclude=map,force,line output=echarts.js plain=true
名稱 | 描述 |
---|---|
optimize | 是否壓縮, 默認false |
exclude | 不打包的圖表,多個圖表使用逗號分割, 默認使用所有圖表 |
output | 輸出打包地址,默認為echarts.js |
plain | 是否打包esl, 打包的話可以直接使用scripts標簽引入, 默認false |
config-tpl.js文件修改為:
{ // appDir: './', baseUrl: '../src', name: 'echarts', packages: [ { name: 'zrender', location: '../../zrender/src', main: 'zrender' }, { name: 'echarts', location: '.', main: 'echarts' } ], include:[ 'echarts/chart/line' ], out: 'echarts.js' }
完成后,將echarts.js拷貝到doc/example/www/js文件中,並將原有的覆蓋
HTML配置如下:
require.config({ paths: { echarts: '../js/echarts', //echarts.js的路徑
'echarts/chart/bar' : './js/echarts', // 把所需圖表指向單文件
'echarts/chart/line': './js/echarts'
} });
require.config配置后后就可以通過動態加載使用echarts。
require( [ 'echarts', 'echarts/chart/line', // 按需加載所需圖表 'echarts/chart/bar' ], function (ec) { var myChart = ec.init(domMain); var option = { ... } myChart.setOption(option); } );
3 標簽式單文件引入
如果你的項目本身並不是基於模塊化開發的,或者是基於CMD規范(如使用的是seajs),那么引入基於AMD模塊化的echarts可能並不方便,我們建議你采用srcipt標簽
式引入,忘掉require,srcipt標簽引入echarts后將可以直接使用兩個全局的命名空間:echarts,zrender,但是需要注意的是excanvas依賴body標簽插入Canvas節點
去判斷Canvas的支持,如果你把引用echarts的script標簽放置head內在IE8-的瀏覽器中會出現報錯,解決的辦法就是把標簽移動到body內(后)。
標簽式引入環境中,常用模塊的引用可通過命名空間直取,同模塊化下的路徑結構,如:
echarts.config = require('echarts/config'), zrender.tool.color = require('zrender/tool/color')
可以直接引入的單文件如下:
echarts.js : 經過壓縮,包含除地圖外的全部圖表
echarts-original.js : 未壓縮,可用於調試,包含除地圖外的全部圖表
echarts-map.js : 經過壓縮,全圖表,包含world,china以及34個省市級地圖數據
echarts-original-map.js : 未壓縮,可用於調試,全圖表,包含world,china以及34個省市級地圖數據
<script src="example/www2/js/echarts-plain.js"></script> <script> var myChart = echarts.init(domMain); var option = { ... } myChart.setOption(option); </script>
牛刀小試----代碼解析柱狀圖
今天在學習Echarts練習時,總是在路徑的配置上出現錯誤,作為入門,總結一下,在此分享給大家,希望有用。
ECharts主頁: http://echarts.baidu.com/index.html
ECharts-2.2.0下載地址: http://echarts.baidu.com/build/echarts-2.2.0.zip
ECharts官方實例: http://echarts.baidu.com/doc/example.html
ECharts官方API文檔: http://echarts.baidu.com/doc/doc.html
需要注意的是ECharts內部也是依賴於另一個插件的叫ZRender,當然對於大部分圖表而言不需要ZRender的,但是對於地圖控件及其他復雜的呈現控件而已都是需要ZRender的。為了避免不要的問題出現,建議大家在下載ECharts時同時也要下載ZRender。
ZRender下載地址:http://ecomfe.github.io/zrender/index.html
1、項目結構
js文件夾: 下載了ECharts之后,解壓縮,如解壓后的根目錄是echarts-2.2.0,則到echarts-2.2.0\doc\example\www路徑下,把里面的js文件夾直接復制粘貼到項目的 WebRoot根目錄下即可。ZRender插件放在與ECharts的同一目錄下,即zrender-master\src
這里有以下幾點需要說明:
l 所有的跟ECharts有關的文件全部都在echarts文件夾下
l echarts文件夾的內容分為兩部分
1) 一部分是以echarts開頭的js文件,這些文件全部來自於1.中的ECharts文件目錄中的js文件夾下的文件,也就是1.中的圖中紅框標注的js下的文件。如下:
2) 另一部分是一個名為zrender的文件夾,這里需要特別注意的是該文件夾的命名必須為zrender,因為在echarts的js文件中對zrender的引用都是以zrender為根目錄的,zrender文件夾的內容即為1.中zrender文件目錄中的src文件夾下的內容,如下:
dem1:index.html:在WebRoot根目錄下新建index.html
<!DOCTYPE html>
<html>
<head>
<title>ECharts</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<!-- 為ECharts准備一個具備大小(寬高)的Dom -->
<div id="main" style="height:400px"></div>
<!-- ECharts單文件引入 -->
<script src="js/echarts.js"></script>
<script type="text/javascript">
// 路徑配置
require.config({
paths: {
echarts: './js'
}
});
// 使用
require(
[
'echarts',
'echarts/chart/bar', // 使用柱狀圖就加載bar模塊,按需加載
'echarts/chart/line'
],
function (ec) {
// 基於准備好的dom,初始化echarts圖表
var myChart = ec.init(document.getElementById('main'));
var option = {
tooltip: {
show: true
},
legend: {
data:['銷量']
},
xAxis : [
{
type : 'category',
data : ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
name:"銷量",
type:"bar",
data:[5, 20, 40, 10, 10, 20]
},//折線圖
{
name:"銷量",
type:"line",
data:[5, 20, 40, 10, 10, 20],
//繪制平均線
markLine : {
data : [
{
type : 'average',
name: '平均值'
}
]
},
//繪制最高最低點
markPoint : {
data : [
{
type : 'max',
name: '最大值'
},
{
type : 'min',
name: '最小值'
}
]
}
}
]
};
// 為echarts對象加載數據
myChart.setOption(option);
}
);
</script>
</body>
</html>
dem2:echarts.jsp:同上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ECharts-基本線性圖及其配置要求</title>
</head>
<body>
<!--Step:1 Prepare a dom for ECharts which (must) has size (width & hight)-->
<!--Step:1 為ECharts准備一個具備大小(寬高)的Dom-->
<div id="main" style="height:500px;border:1px solid #ccc;padding:10px;"></div>
<div id="mainMap" style="width:500px;height:500px;border:1px solid #ccc;padding:10px;"></div>
<!--Step:2 Import echarts.js-->
<!--Step:2 引入echarts.js-->
<script src="js/echarts.js"></script>
<script type="text/javascript">
// Step:3 conifg ECharts's path, link to echarts.js from current page.
// Step:3 為模塊加載器配置echarts的路徑,從當前頁面鏈接到echarts.js,定義所需圖表路徑
require.config({
paths: {
echarts: './js' //echarts.js所在的路徑
}
});
// Step:4 require echarts and use it in the callback.
// Step:4 動態加載echarts然后在回調函數中開始使用,注意保持按需加載結構定義圖表路徑
require(
[
'echarts',
'echarts/chart/bar',
'echarts/chart/line',
'echarts/chart/map'
],
function (ec) {//渲染ECharts圖表 ,可單獨寫出來作為回調函數
//--- 折柱 ---
//圖表渲染的容器對象
var chartContainer = document.getElementById("main"); //""、''這里均可以
//加載圖表
var myChart = ec.init(chartContainer);
myChart.setOption({
tooltip : {
trigger: 'axis'
},
legend: {
data:['蒸發量','降水量']
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore : {show: true},
saveAsImage : {show: true}
}
},
calculable : true,
xAxis : [
{
name : '月份',
type : 'category',
data : ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
}
],
yAxis : [
{
name : '數值',
type : 'value',
splitArea : {show : true}
}
],
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]
}
]
});
// --- 地圖 ---
var myChart2 = ec.init(document.getElementById('mainMap'));
var option = {
tooltip : {
trigger: 'item',
formatter: '{b}'
},
series : [
{
name: '中國',
type: 'map',
mapType: 'china',
selectedMode : 'multiple',
itemStyle:{
normal:{label:{show:true}},
emphasis:{label:{show:true}}
},
data:[
{name:'廣東',selected:true}
]
}
]
};
myChart2.setOption(option); // 為echarts對象加載數據
}
);
</script>
</body>
</html>
完成以上的步驟后,把項目發布到服務器,在瀏覽器上訪問echarts.jsp(由於本實例還沒有跟后台進行交互,只是先做一個前台用法介紹,所以可以把echart.jsp直接修改成echarts.html文件,把它跟js文件夾放在同一級目錄下,然后直接用瀏覽器打開echarts.html),即可看到效果。好了,這次總結就先到這里!