文章目錄
- 一、概念
- 二、回顧在系列(series)中設置數據
- 三、在數據集中設置數據
- 3.1 數據集(dataset) 基礎
- 3.2 二維數組數據(默認)
- 四、把數據集(dataset) 的行或列 映射為 序列 (series)
- 五、維度(dimension)
- 六、數據到圖形的映射 (series.encode)
一、概念
數據集 (dataset)
是專門用來管理數據的組件。雖然可以在 series.data
中設置每個系列數據,但是使用數據集來管理數據更高效,數據可以被多個組件復用,可以方便進行 數據和其他配置
分離的配置風格。
二、回顧在系列(series)中設置數據
如果在序列(series)
中設置數據,如:
option = {xAxis: {type: 'category',data: ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie']},yAxis: {},series: [{type: 'bar',name: '2015',data: [89.3, 92.1, 94.4, 85.4]},{type: 'bar',name: '2016',data: [95.8, 89.4, 91.2, 76.9]},{type: 'bar',name: '2017',data: [97.7, 83.1, 92.5, 78.1]}]
};
優點:
適于對一些特殊的數據結構(如“樹”、“圖”、超大數據)進行一定的數據類型定制缺點:
但是缺點是,常需要用戶先處理數據,把數據分割設置到各個系列(和類目軸)中。此外,不利于多個系列共享一份數據,也不利于基于原始數據進行圖表類型、系列的映射安排。
三、在數據集中設置數據
優勢:
- 能夠貼近數據可視化常見思維方式:(I)提供數據,(II)指定數據到視覺的映射,從而形成圖表。
- 數據和其他配置可以被分離開來。數據常變,其他配置常不變。分開易于分別管理。
- 數據可以被多個系列或者組件復用,對于大數據量的場景,不必為每個系列創建一份數據。
- 支持更多的數據的常用格式,例如二維數組、對象數組等,一定程度上避免使用者為了數據格式而進行轉換
如:
option = {legend: {},tooltip: {},dataset: {// 提供一份數據。source: [['product', '2015', '2016', '2017'],['Matcha Latte', 43.3, 85.8, 93.7],['Milk Tea', 83.1, 73.4, 55.1],['Cheese Cocoa', 86.4, 65.2, 82.5],['Walnut Brownie', 72.4, 53.9, 39.1]]},// 聲明一個 X 軸,類目軸(category)。默認情況下,類目軸對應到 dataset 第一列。xAxis: { type: 'category' },// 聲明一個 Y 軸,數值軸。yAxis: {},// 聲明多個 bar 系列,默認情況下,每個系列會自動對應到 dataset 的每一列。series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
};
或者使用常見的 對象數組 格式:
option = {legend: {},tooltip: {},dataset: {// 用 dimensions 指定了維度的順序。直角坐標系中,如果 X 軸 type 為 category,// 默認把第一個維度映射到 X 軸上,后面維度映射到 Y 軸上。// 如果不指定 dimensions,也可以通過指定 series.encode// 完成映射,參見后文。dimensions: ['product', '2015', '2016', '2017'],source: [{ product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7 },{ product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1 },{ product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5 },{ product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1 }]},xAxis: { type: 'category' },yAxis: {},series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
};
3.1 數據集(dataset) 基礎
使用dataset設置數據集,可以將數據和配置項分開,便于動態數據的使用,易于管理。
數據集的位置一般為option.dataset
, 又兩個常用的屬性分別為 source
和 dimensions
source
用于指定數據 可以是二維數組
,也可以是對象數組
dimensions
用于指定維度與數據項,當指定列為維度的時候,那么每行就是一個數據項。
dataset
配置項遵循 先類目、后數據 的規律,在默認情況下,先選擇類目軸的內容,接下來內容則為繪制圖形中對應的數據值。
3.2 二維數組數據(默認)
在使用 dataset
時,ECharts 會自動搜索 source
中的數據,在未指定的情況下默認
第1列從第2行
開始為類目軸中的顯示內容(產品名稱),第2列
開始每1列為一組數據,即從左向右看為 先類目、后數據
,
四、把數據集(dataset) 的行或列 映射為 序列 (series)
可以使用 seriesLayoutBy
配置項,改變圖表對于行列的理解。seriesLayoutBy 可取值:
'column'
: 默認值。系列被安放到 dataset 的列上面。
'row'
: 系列被安放到 dataset 的行上面。
option = {legend: {},tooltip: {},dataset: {source: [['product', '2012', '2013', '2014', '2015'],['Matcha Latte', 41.1, 30.4, 65.1, 53.3],['Milk Tea', 86.5, 92.1, 85.7, 83.1],['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]]},xAxis: [{ type: 'category', gridIndex: 0 },{ type: 'category', gridIndex: 1 }],yAxis: [{ gridIndex: 0 }, { gridIndex: 1 }],grid: [{ bottom: '55%' }, { top: '55%' }],series: [// 這幾個系列會出現在第一個直角坐標系中,每個系列對應到 dataset 的每一行。{ type: 'bar', seriesLayoutBy: 'row', xAxisIndex: 0, yAxisIndex: 0 },{ type: 'bar', seriesLayoutBy: 'row', xAxisIndex: 0, yAxisIndex: 0 },{ type: 'bar', seriesLayoutBy: 'row', xAxisIndex: 0, yAxisIndex: 0 },// 這幾個系列會出現在第二個直角坐標系中,每個系列對應到 dataset 的每一列。{ type: 'bar', seriesLayoutBy: 'column', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', seriesLayoutBy: 'column', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', seriesLayoutBy: 'column', xAxisIndex: 1, yAxisIndex: 1 },{ type: 'bar', seriesLayoutBy: 'column', xAxisIndex: 1, yAxisIndex: 1 }]
};
五、維度(dimension)
當我們把系列(series)對應到“列”的時候,那么每一列就稱為一個“維度(dimension)”,而每一行稱為數據項(item)。反之,如果我們把系列(series)對應到表行,那么每一行就是“維度(dimension)”,每一列就是數據項(item)。
維度可以有單獨的名字,便于在圖表中顯示。維度名(dimension name)可以在定義在 dataset 的第一行(或者第一列)。例如下面的例子中,‘score’、‘amount’、‘product’ 就是維度名。從第二行開始,才是正式的數據。dataset.source 中第一行(列)到底包含不包含維度名,ECharts 默認會自動探測。當然也可以設置 dataset.sourceHeader: true 顯示聲明第一行(列)就是維度,或者 dataset.sourceHeader: false 表明第一行(列)開始就直接是數據。
維度的定義,也可以使用單獨的 dataset.dimensions 或者 series.dimensions 來定義,這樣可以同時指定維度名,和維度的類型(dimension type):
var option1 = {dataset: {dimensions: [{ name: 'score' },// 可以簡寫為 string ,表示 dimension name 。'amount',// 可以在 type 中指定維度類型。{ name: 'product', type: 'ordinal' }],source: [//...]}// ...
};var option2 = {dataset: {source: [// ...]},series: {type: 'line',// series.dimensions 會更優先于 dataset.dimension 采納。dimensions: [null, // 可以設置為 null 表示不想設置維度名'amount',{ name: 'product', type: 'ordinal' }]}// ...
};
大多數情況下,我們并不需要去設置維度類型,因為 ECharts 會自動嘗試判斷。但是如果不足夠準確時,可以手動設置維度類型。
維度類型(dimension type)可以取這些值:
'number'
: 默認,表示普通數據。'ordinal'
: 對于類目、文本這些 string 類型的數據,如果需要能在數軸上使用,須是 ‘ordinal’ 類型。ECharts 默認會試圖自動判斷這個類型。但是自動判斷也可能不準確,所以使用者也可以手動強制指定。
'time'
: 表示時間數據。設置成 ‘time’ 則能支持自動解析數據成時間戳(timestamp),比如該維度的數據是 ‘2017-05-10’,會自動被解析。如果這個維度被用在時間數軸(axis.type 為 ‘time’)上,那么會被自動設置為 ‘time’ 類型。時間類型的支持參見 data。
'float'
: 如果設置成 ‘float’,在存儲時候會使用 TypedArray,對性能優化有好處。
'int'
: 如果設置成 ‘int’,在存儲時候會使用 TypedArray,對性能優化有好處。
六、數據到圖形的映射 (series.encode)
var option = {dataset: {source: [['score', 'amount', 'product'],[89.3, 58212, 'Matcha Latte'],[57.1, 78254, 'Milk Tea'],[74.4, 41032, 'Cheese Cocoa'],[50.1, 12755, 'Cheese Brownie'],[89.7, 20145, 'Matcha Cocoa'],[68.1, 79146, 'Tea'],[19.6, 91852, 'Orange Juice'],[10.6, 101852, 'Lemon Juice'],[32.7, 20112, 'Walnut Brownie']]},xAxis: {},yAxis: { type: 'category' },series: [{type: 'bar',encode: {// 將 "amount" 列映射到 X 軸。x: 'amount',// 將 "product" 列映射到 Y 軸。y: 'product'}}]
};