Matplotlib條形圖


條形圖或條形圖是一種圖表或圖形,它顯示帶有矩形條的分類資料,其高度或長度與它們所代表的值成比例。可以垂直或水平繪製條形。

條形圖顯示了離散類別之間的比較。圖表的一個軸顯示要比較的特定類別,另一個軸表示測量值。

Matplotlib API提供了bar()函式,可以在MATLAB樣式使用以及物件導向的API中使用。與axis物件一起使用的bar()函式的簽名如下 -

ax.bar(x, height, width, bottom, align)

該函式使用大小為(x ?width = 2; x + width=2; bottom; bottom + height)來系結矩形建立條形圖。

該函式的引數是 -

  • x - 表示條形的x坐標的標量序列。如果x是條形中心(預設)或左邊緣,則對齊控制元件。
  • height - 標量或標量序列表示條的高度。
  • width - 標量或類似陣列,可選。條形的寬度預設為0.8
  • bottom - 標量或類似陣列,可選。條形的y坐標預設為None
  • align - {'center','edge'},可選,預設:center

該函式返回包含所有條形的Matplotlib容器物件。
以下是Matplotlib條形圖的簡單範例。它顯示了在一所學院提供的各種課程的學生人數。

#! /usr/bin/env python
#coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
import math

plt.rcParams['font.sans-serif'] = ['SimHei'] # 步驟一(替換sans-serif字型)
plt.rcParams['axes.unicode_minus'] = False   # 原文出自【易百教學】,商業轉載請聯絡作者獲得授權,非商業請保留原文連結:

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.bar(langs,students)
plt.show()

執行上面範例程式碼,得到以下結果 -

當比較多個數量和更改一個變數時,可能需要一個條形圖,其中有一個顏色的條形圖用於一個數量值。

可以通過使用條形的厚度和位置來繪製多個條形圖。資料變數包含三個系列的四個值。以下指令碼將顯示四個條形圖的三個條形圖。這些條的厚度為0.25個單位。每個條形圖將從前一個移動0.25個單位。資料物件是一個多元圖,包含過去四年在工程學院的三個分支中通過的學生數量。

#! /usr/bin/env python
#coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
import math

plt.rcParams['font.sans-serif'] = ['SimHei'] # 步驟一(替換sans-serif字型)
plt.rcParams['axes.unicode_minus'] = False   # 原文出自【易百教學】,商業轉載請聯絡作者獲得授權,非商業請保留原文連結:

data = [[30, 25, 50, 20],
[40, 23, 51, 17],
[35, 22, 45, 19]]
X = np.arange(4)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(X + 0.00, data[0], color = 'b', width = 0.25)
ax.bar(X + 0.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)
plt.show()

執行上面範例程式碼,得到以下結果 -

堆積條形圖堆疊表示彼此頂部的不同組的條形圖。結果為條形圖的高度顯示組的組合結果。

pyplot.bar()函式的可選bottom引數指定條的起始值。它不是從零執行到一個值,而是從底部到值。第一次呼叫pyplot.bar()繪製藍條。第二次呼叫pyplot.bar()繪製紅色條形圖,藍色條形圖的底部位於紅色條形圖的頂部。

#! /usr/bin/env python
#coding=utf-8
import matplotlib.pyplot as plt
import numpy as np
import math

plt.rcParams['font.sans-serif'] = ['SimHei'] # 步驟一(替換sans-serif字型)
plt.rcParams['axes.unicode_minus'] = False   # 原文出自【易百教學】,商業轉載請聯絡作者獲得授權,非商業請保留原文連結:

N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N) # the x locations for the groups
width = 0.35
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(ind, menMeans, width, color='r')
ax.bar(ind, womenMeans, width,bottom=menMeans, color='b')
ax.set_ylabel('分數')
ax.set_title('按組和性別分數')
ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
ax.set_yticks(np.arange(0, 81, 10))
ax.legend(labels=['男', '女'])
plt.show()

執行上面範例程式碼,得到以下結果 -