Matplotlib ( III ) — 畫柱狀圖

今天我們繼續來用 Matplotlib ,今天做的是直方圖,和摺線圖相比,我們只要把 plot 改成 bar 就好,我們延續 plot 中的兩個班級課後休閒活動調查來畫畫看。這邊我們先單獨畫出a 班的圖。

import matplotlib.pyplot as plt
x = ['basketball', 'swim', 'take photos', 'reading', 'guitar']

class_a = [8, 7, 1, 6, 5]
class_b = [12, 2, 9, 5, 3]
plt.bar(x, class_a, label = 'class_a')

大家可以看到非常簡單的只要把 plot 改成 bar 就好了。接著我們試著看看把 b 班也一起加上來吧~~

plt.bar(x, class_a, label = 'class_a')
plt.bar(x, class_b, label = 'class_b')

結果發生悲劇惹,我們可以看到大家可以看到 b 班的資料把 a 班蓋掉拉 ~ 尤其是basketball 跟 swim 因為 a 班數量比較少,所以完全看不出來是多少。所以我們要想其他的處理方式。在plt.bar()中還有可以參數align可以調整,他有兩種選擇,一是” center “,另一種是” edge “,設定” center “的話,長條圖會對準中間,而 ” edge ” 則會左邊對準黑線。所以我們再來修改一下這個參數試試看吧~

plt.bar(x, class_a, label = 'class_a', align = "center")
plt.bar(x, class_b, label = 'class_b', align = "edge")

畫出來之後覺得結果還是差強人意,雖然部分分開來了,但是有一部分還是重疊的,我們必須要想辦法把它分開,大家可能會想說既然有左邊靠齊的 ” edge “,那有沒有右邊靠齊的選項呢?很不幸的,答案是沒有,不過我們可以利用另一個參數讓他右邊對齊,那個參數叫做width,但大家可能又發現一件事情,width不是指的是寬度嗎?對沒錯,width 指的是直方圖左邊對齊的地方到右邊的寬度,所以我們把 width 令成負數的話,他就會變成往左邊,就可以達到對齊右邊的目標,我們現在來試試看:

plt.bar(x, class_a, label = 'class_a', align = "edge", width = 0.35)
plt.bar(x, class_b, label = 'class_b', align = "edge", width = -0.35)

最後我們用之前學過的,增加標題與x, y軸的名稱,調整一下這張圖:

plt.bar(x, class_a, label = 'class_a', align = "edge", width = 0.35)
plt.bar(x, class_b, label = 'class_b', align = "edge", width = -0.35)
plt.legend() #要使用label要加這行

plt.title("hobbies investigation")
plt.xlabel("hobbies")
plt.ylabel("numbers")

 

Facebook Comments

發表迴響