文章目錄
- 1. 豎放條形圖
-
-
-
- bar(x, height, [width], **kwargs)
-
-
- 2. 橫放條形圖
-
-
-
- bar(x, width, [height], **kwargs)
-
-
- 3. 并列條形圖
條形圖(bar chart),也稱為柱狀圖,是一種以長方形的長度為變量的統計圖表,長方形的長度與它所對應的變量數值呈一定比例。
1. 豎放條形圖
畫條形圖要用到 pyplot 中的 bar 函數,該函數的基本文法為:
bar(x, height, [width], **kwargs)
x | 數組,每個條形的橫坐标 |
---|---|
height | 個數或一個數組,條形的高度 |
[width] | 可選參數,一個數或一個數組,條形的寬度,預設為 0.8 |
**kwargs | 不定長的關鍵字參數,用字典形式設定條形圖的其他屬性 |
**kwargs 中常設定的參數包括圖形标簽 label,顔色标簽 color,不透明度 alpha 等。
假設某項針對男女大學生購買飲用水愛好的調查結果如下表:
男 | 女 | |
---|---|---|
碳酸飲料 | 6 | 9 |
綠茶 | 7 | 4 |
礦泉水 | 6 | 4 |
其他 | 2 | 6 |
果汁 | 1 | 5 |
總計 | 22 | 28 |
畫出男生飲用水情況的直方圖,代碼如下:
import matplotlib.pyplot as plt
# 這兩行代碼解決 plt 中文顯示的問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
waters = ('碳酸飲料', '綠茶', '礦泉水', '果汁', '其他')
buy_number = [6, 7, 6, 1, 2]
plt.bar(waters, buy_number)
plt.title('男性購買飲用水情況的調查結果')
plt.show()
圖形:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB9ENrRVT1Z1RhpWOGRWeW1WW2p0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwQTO2QDMwADM0IDOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2. 橫放條形圖
若要生成橫的條形圖,則可以使用 barh 函數,其文法與 bar 函數非常類似。
bar(x, width, [height], **kwargs)
y | 數組,每個條形的縱坐标 |
---|---|
width | 一個數或一個數組,條形的寬度 |
[height] | 可選參數,一個數或一個數組,條形的高度,預設為 0.8 |
**kwargs | 不定長的關鍵字參數,用字典形式設定條形圖的其他屬性 |
代碼:
import matplotlib.pyplot as plt
# 這兩行代碼解決 plt 中文顯示的問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
waters = ('碳酸飲料', '綠茶', '礦泉水', '果汁', '其他')
buy_number = [6, 7, 6, 1, 2]
plt.barh(waters, buy_number) # 橫放條形圖函數 barh
plt.title('男性購買飲用水情況的調查結果')
plt.show()
3. 并列條形圖
若要将男生與女生的調查情況畫出兩個條形圖一塊顯示,則可以使用 bar 或 barh 函數兩次,并調整 bar 或 barh 函數的條形圖位置坐标以及相應刻度,使得兩組條形圖能夠并排顯示。
import matplotlib.pyplot as plt
import numpy as np
# 這兩行代碼解決 plt 中文顯示的問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 輸入統計資料
waters = ('碳酸飲料', '綠茶', '礦泉水', '果汁', '其他')
buy_number_male = [6, 7, 6, 1, 2]
buy_number_female = [9, 4, 4, 5, 6]
bar_width = 0.3 # 條形寬度
index_male = np.arange(len(waters)) # 男生條形圖的橫坐标
index_female = index_male + bar_width # 女生條形圖的橫坐标
# 使用兩次 bar 函數畫出兩組條形圖
plt.bar(index_male, height=buy_number_male, width=bar_width, color='b', label='男性')
plt.bar(index_female, height=buy_number_female, width=bar_width, color='g', label='女性')
plt.legend() # 顯示圖例
plt.xticks(index_male + bar_width/2, waters) # 讓橫坐标軸刻度顯示 waters 裡的飲用水, index_male + bar_width/2 為橫坐标軸刻度的位置
plt.ylabel('購買量') # 縱坐标軸标題
plt.title('購買飲用水情況的調查結果') # 圖形标題
plt.show()
顯示: