專案地址
介紹
柱狀圖作為最常見的視覺化圖表,用於展示一些比較基礎的資料,其中分為基本柱狀圖、堆疊柱狀圖。通過實現這兩種圖表,我們將學習到以下內容
- 基本柱圖
- 座標軸X、Y軸繪製
- 維度、度量設定
- 堆疊柱狀圖
- 座標軸指示器
- 圖例切換
- 堆疊定義
- 標記線
基本柱圖分析
假設我們需要在白紙上畫出一個柱狀圖,首先我們會繪製座標軸,然後再去繪製對應的柱子。這也符合大多數情況下我們使用Echarts繪製圖表的流程。柱狀圖使用的是直角座標系,包含X、Y軸,柱狀圖的X軸一般表示的文字型別的值,Y軸則是數量型別的值。為了方便我們之後的理解,文字型別的稱為 維度 ;數值型別的稱為 度量
柱狀圖繪圖順序
所以我們現在的基本柱狀圖的繪圖順序可以理解為
-
- 設定X軸及其對應的維度
-
- 設定Y軸及其對應的度量
在Echarts中,基本柱狀圖的繪圖單元對應的配置項關係表如下
柱狀圖繪圖單元配置表
繪圖單元 | 配置項 |
---|---|
X軸 | xAxis |
X軸對應維度 | xAxis.data |
Y軸 | yAxis |
Y軸對應度量 | series[i].data |
柱狀圖繪圖單元配置表分析
為什麼維度與度量的配置項不同?我們來結合Echarts提供的配置項手冊以及基本柱狀圖的程式碼來分析一下
在Echarts配置項手冊中,xAxis與yAxis除了配置名稱不一樣,其餘都是一樣的。示例程式碼對應屬性及說明如下:
屬性名稱 | 含義 | 說明 |
---|---|---|
type | 座標軸型別 | category:維度軸 value:度量軸 |
data | 維度資料 | 只有在維度軸才有效 |
在設定了x、y軸及x軸的維度後。圖表會出現基本的座標軸。然後需要設定y軸的度量資料。
柱狀圖/條形圖 通過柱形的高度/條形的寬度來表現資料的大小。當設定了維度軸後,另外一個軸對應的就是度量軸。度量軸的資料需要在series裡進行設定,series代表的是資料系列陣列。陣列裡的每個元素都代表了一組度量資料。示例程式碼對應屬性及說明如下:
屬性名稱 | 含義 | 說明 |
---|---|---|
type | 資料系列型別 | bar:柱狀/條形圖 |
data | 度量資料 | 只有在度量軸才有效 |
柱狀圖示例程式碼分析
那麼現在結合基本柱狀圖的程式碼再來分析一下,程式碼如下
let chart = this.$refs.chart;
echarts.init(chart).setOption({
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar'
}]
});
複製程式碼
X軸:xAxis的type為category,說明x軸為維度軸。xAxis的data就是指的維度軸的資料
Y軸:yAxis的type為value,說明y軸為度量軸。而度量軸的資料需要在series配置中進行設定。
series[i]的type為bar時,代表此係列圖表為柱狀/條形圖,而data則對應著度量資料
柱狀圖實現效果
堆疊柱狀圖分析
堆疊柱狀圖指的是同一個柱形上,可能有多個細分子類的資料。我們在柱狀圖的基礎上,繼續配置提示框、圖例、網格、標記線。生成可配置性更高的堆疊柱狀圖。
堆疊柱狀圖繪圖順序
-
- 設定提示框
-
- 設定圖例
-
- 設定網格
-
- 設定X軸及維度資料
-
- 設定Y軸
-
- 設定資料系列度量資料
-
- 設定堆疊
-
- 設定標記線
-
- 設定柱條寬度
堆疊柱狀圖繪圖單元配置表
繪圖單元 | 配置項 |
---|---|
提示框 | tooltip |
圖例 | legend |
網格 | grid |
X軸 | xAxis |
X軸對應維度 | xAxis.data |
Y軸 | yAxis |
堆疊 | series[i].stack |
圖表標線 | markLine |
柱條寬度 | barWidth |
堆疊柱狀圖單元配置表分析
提示框(tooltip)作為圖表輔助元件,也稱為指示器,可以展示資料的更多指標資訊。有不同型別:分別為全域性、座標系、系列、資料項。示例程式碼對應屬性及說明如下:
屬性名稱 | 含義 | 說明 |
---|---|---|
trigger | 提示觸發型別 | item:資料項圖形觸發; axis:座標軸觸發 ;none:不觸發 |
axisPointer | 座標軸指示器配置項 | 在座標軸指示器中生效 |
axisPointer.type | 指示器型別 | line:直線型; shadow:陰影型; none:無; cross:十字準星型 |
圖例(legend)元件使用在存在多個資料系列的場景下,可以點選圖例控制該系列資料的顯示情況,示例程式碼對應屬性及說明如下:
屬性名稱 | 含義 | 說明 |
---|---|---|
data | 資料陣列 | 每一項代表一個系列的name,如果沒有指定會從當前系列中自動獲取 |
網格(grid)在圖表容器內的元件,用於設定圖表網格的位置、樣式等狀態,示例程式碼對應屬性及說明如下:
屬性名稱 | 含義 | 說明 |
---|---|---|
left、right、bottom、top | 離容器各方向距離 | 可以為具體畫素值、百分比、居中格式(left、center、right) |
containLabel | 網格是否包含座標軸的刻度標籤 | 可用於防止標籤溢位 |
堆疊(stack)應用於柱狀圖的圖表時,會使柱形的高度進行堆疊。示例程式碼對應屬性及說明如下:
屬性名稱 | 含義 | 說明 |
---|---|---|
無 | 設定柱形堆疊 | 相同維度軸擁有相同stack值的柱形會進行堆疊擺放 |
圖表標線(markLine)可以在圖表上進行繪製直線。示例程式碼對應屬性及說明如下:
屬性名稱 | 含義 | 說明 |
---|---|---|
lineStyle | 標線的樣式 | 可設定標線顏色、寬度、型別等屬性 |
lineStyle.type | 標線型別 | solid:實線;dashed:虛線;dotted:點 |
data | 標線的資料陣列 | 每個陣列項可以是兩個值的陣列,代表線的、終點 |
堆疊柱狀圖示例程式碼分析
let option = {
tooltip : {
trigger: 'axis',
axisPointer : {
type : 'shadow'
}
},
legend: {
data:['直接訪問','郵件營銷','聯盟廣告','視訊廣告','搜尋引擎','百度','谷歌','必應','其他']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis : [
{
type : 'category',
data : ['週一','週二','週三','週四','週五','週六','週日']
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
name:'直接訪問',
type:'bar',
data:[320, 332, 301, 334, 390, 330, 320]
},
{
name:'郵件營銷',
type:'bar',
stack: '廣告',
data:[120, 132, 101, 134, 90, 230, 210]
},
{
name:'聯盟廣告',
type:'bar',
stack: '廣告',
data:[220, 182, 191, 234, 290, 330, 310]
},
{
name:'視訊廣告',
type:'bar',
stack: '廣告',
data:[150, 232, 201, 154, 190, 330, 410]
},
{
name:'搜尋引擎',
type:'bar',
data:[862, 1018, 964, 1026, 1679, 1600, 1570],
markLine : {
lineStyle: {
type: 'dashed'
},
data : [
[{type : 'min'}, {type : 'max'}]
]
}
},
{
name:'百度',
type:'bar',
stack: '搜尋引擎',
data:[620, 732, 701, 734, 1090, 1130, 1120]
},
{
name:'谷歌',
type:'bar',
stack: '搜尋引擎',
data:[120, 132, 101, 134, 290, 230, 220]
},
{
name:'必應',
type:'bar',
stack: '搜尋引擎',
data:[60, 72, 71, 74, 190, 130, 110]
},
{
name:'其他',
type:'bar',
stack: '搜尋引擎',
data:[62, 82, 91, 84, 109, 110, 120]
}
]
};
複製程式碼
提示框:tooltip設定在全域性option下,且trigger(觸發型別)為座標軸觸發。當懸浮到座標軸上時,會出現陰影型的提示資訊,因為axisPointer的type值為shadow,代表指示器型別為陰影型
圖例:legend的data為陣列,表示此圖表包含這些資料系列:'直接訪問','郵件營銷','聯盟廣告','視訊廣告','搜尋引擎','百度','谷歌','必應','其他'
網格:位置資訊說明網格在容器中,左邊距偏移3%,右邊距偏移4%,底部偏移3%。containLabel值為true說明網格包含了座標軸的標籤
X、Y軸分析與基本柱狀圖一致
資料系列:series陣列中,每一個陣列項對應著圖例(legend)中的每一項。其中,郵件營銷、聯盟廣告、視訊廣告系列對應的stack(堆疊屬性)均為廣告,百度、谷歌、必應、其他系列對應的stack均為搜尋引擎,所以圖表存在兩種堆疊柱形。
圖表標線:搜尋引擎系列中的markLine配置項設定了標線的樣式。lineStyle的type為dashed說明標線的格式為虛線,data陣列中type分別為特殊標註型別的最小值和最大值,所以起點為搜尋引擎系列的最小值,終點為最大值
堆疊柱狀圖實現效果
思考&練習
- 如何實現基礎條形圖?
- 如何實現並列柱圖?(多個資料系列的柱形組合圖表)
- 如何實現堆疊條形圖?
- 如何標線堆疊下的平均值?