Python matplotlib 畫圖 – error bar柱狀圖(長條圖)

應用篇

之前介紹了如何使用matplotlib製作散佈圖,這次要來介紹的是如何繪製棒狀圖。

棒狀圖

在製作棒狀圖時,我們會使用到matplotlib的pyplot.bar功能。

如何使用 pyploy.bar?

首先我們來看一下pyplot.bar的詳細參數。

pyplot.bar(left, 
height, 
width=0.8, 
bottom=None, 
hold=None, 
data=None,
 **kwargs)

除了上面的這些參數之外,還有一些常用到的參數。

left(必要)各個棒的X軸上的數值(名稱)
height(必要)各個棒的高度
width棒的粗度
bottom各個棒的下面的空間
color棒的顏色
edgecolor棒的邊緣的顏色
linewidth棒的邊緣的粗度
tick_labelX軸的名稱
align棒的位置的制定
logTrue的話會出現指數圖表
xerrX軸方向的Error bar(誤差)
yerrY軸方向的Error bar(誤差)
ecolorError bar(誤差)的顏色
capsizeError bar(誤差)大小

繪製基本的棒狀圖

接著我們來看看如何繪製基本的棒狀圖!只要使用pyplot.bar()就可以做棒狀圖。必要的參數有X軸的各個棒的名稱(數值)以及,各個棒的大小(Y軸)。也就是left以及height

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height = np.array([10, 30,50, 20, 33])
plt.bar(left, height)
plt.show()

執行結果會像下面這樣。

更改棒狀圖的設計

變更棒狀圖的粗度

在剛剛上面的參數部分有提到,只要調整width這個參數就可以調整棒狀圖的粗度。width的默認值是0.8,因此每個棒之間都會有間隔,如果把width調整成1的話各個棒之間的間隔就會消失。這裡我們只要在代碼之中加入一句width=1就可以了。

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height = np.array([10, 30,50, 20, 33])
plt.bar(left, height, width=1.0)
plt.show()

輸出結果

調整棒的顏色以及邊緣的粗度

接著我們可以用color來調整棒的顏色。棒的邊緣的粗度則可以用linewidth來做調整。另外如果將linewidth調整為0的話可以將緣線消失。

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height = np.array([10, 30,50, 20, 33])
plt.bar(left, height, color='red', linewidth=0)
plt.show()

執行結果

調整邊緣顏色

接著我們試著把邊緣的粗度調整成2,來試試看把邊緣的顏色也做改變。顏色的部分可以用edgecolor來調整。

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height = np.array([10, 30,50, 20, 33])
plt.bar(left, height, color='red', linewidth=2, edgecolor='orange')
plt.show()

執行結果

指定棒的位置

棒的位置可以透過align來變更。如果align的值是edge的話棒會移到邊緣,center的話會維持在中間。

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height = np.array([10, 30,50, 20, 33])
plt.bar(left, height, color='red', linewidth=2, edgecolor='orange', align='edge')
plt.show()

執行結果

調整X軸的名稱

使用tick_label可以調整X軸名稱。在這邊我們另外生成一個變數labels來作為名稱。

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height = np.array([10, 30,50, 20, 33])
labels = ['apple', 'banana', 'coconut', 'dragon fruit', 'eggplant']
plt.bar(left, height, color='red', linewidth=2, edgecolor='orange', tick_label=labels)
plt.show()

堆積棒狀圖

堆積棒狀圖

除了基本的棒狀圖以外,接著要來介紹堆積棒狀圖。我們要先製作兩個棒狀圖,然後指定要在上面的棒狀圖並且設定參數bottom,接著選擇要在下面的棒狀圖。一開始可能會覺得有點複雜,不過可以挑戰看看!

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height1 = np.array([10, 30,50, 20, 33])
height2 = np.array([21, 31,45, 35, 77])

labels = ['apple', 'banana', 'coconut', 'dragon fruit', 'eggplant']

#選擇要在下面的棒狀圖 blue
plt.bar(left, height1, color='blue', tick_label=labels)

#選擇要在上面的棒狀圖 red
plt.bar(left, height2, bottom=height1, color='red', tick_label=labels)
plt.show()

執行結果

堆積棒狀圖的圖例,標題,Error bar(誤差)

製作一個完整的堆積棒狀圖會有上述的幾個項目。在這邊我們試著讓剛剛製作的堆積棒狀圖更加完整。在這邊我們設定誤差分別是3以及6。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt

left = np.array([1, 2, 3, 4, 5])
height1 = np.array([10, 30,50, 20, 33])
height2 = np.array([21, 31,45, 35, 77])

labels = ['apple', 'banana', 'coconut', 'dragon fruit', 'eggplant']

#選擇要在下面的棒狀圖 blue  誤差3
bar1 = plt.bar(left, height1, color='blue', yerr=3, tick_label=labels)

#選擇要在上面的棒狀圖 red   誤差6
bar2 = plt.bar(left, height2, bottom=height1, yerr=6, color='red', tick_label=labels)
plt.title('Title')
plt.legend((bar1[0], bar2[0]), ('Bar_1', 'Bar_2'))
plt.show()

執行結果

摘要

這次介紹了如何使用matplotlib的bar功能,以及堆積棒狀圖的製作方式。下面幾點是在製作棒狀圖時需要記住的事!

  • 用plt.bar()來做棒狀圖。
  • 可以變更棒狀圖的顏色,位置,緣線等等
  • 利用plt.bottom()可以製作堆積棒狀圖

留言