一、案例一:溫度堆積圖
# 導入 matplotlib 庫中的 pyplot 模塊,這個模塊提供了類似于 MATLAB 的繪圖接口,
# 方便我們創建各種類型的可視化圖表,比如折線圖、柱狀圖、散點圖等
import matplotlib.pyplot as plt
# 導入 numpy 庫,它是 Python 中用于科學計算的基礎庫,提供了強大的多維數組對象和各種數學函數,
# 能高效地處理數值數據,在后續的繪圖中可用于生成和處理坐標軸數據
import numpy as np# 創建一個新的圖形窗口,該函數的參數解釋如下:
# num='堆形圖':設置圖形窗口的標題為 '堆形圖',方便我們識別當前打開的圖形
# figsize=(12, 7):指定圖形的大小,單位為英寸,這里圖形的寬度為 12 英寸,高度為 7 英寸
# facecolor='w':設置圖形窗口的背景顏色為白色,'w' 是白色的縮寫
plt.figure(num='堆形圖', figsize=(12, 7), facecolor='w')# matplotlib 默認的字體可能無法正確顯示中文,所以我們通過修改 rcParams 參數來更改字體。
# 'font.sans-serif' 是用來指定無襯線字體的參數,這里將其設置為 'KaiTi'(楷體),
# 這樣在繪制圖形時,中文就能正常顯示了
plt.rcParams['font.sans-serif'] = 'KaiTi'
# 設置圖形中文字的字體大小為 15,這樣可以讓圖形中的文字清晰易讀
plt.rcParams['font.size'] = 15
# 在默認情況下,matplotlib 可能無法正確顯示負號,將 'axes.unicode_minus' 參數設置為 False,
# 可以解決負號顯示的問題,確保負號能在圖形中正常顯示
plt.rcParams['axes.unicode_minus'] = False# 定義 x 軸的數據,使用 numpy 的 array 函數創建一個一維數組,數組元素為字符串類型,
# 代表 5 個月份,后續會作為柱狀圖的 x 軸刻度
x = np.array(['1', '2', '3', '4', '5'])
# 定義最高溫度的數據,同樣使用 numpy 的 array 函數創建一維數組,
# 數組元素為整數類型,代表每個月對應的最高溫度值
y1 = np.array([10, 8, 7, 11, 13])
# 定義最低溫度的數據,創建一維數組,數組元素為整數類型,
# 代表每個月對應的最低溫度值
y2 = np.array([9, 6, 5, 10, 12])# 定義誤差數據,是一個列表,列表中的元素代表每個月最低溫度數據的誤差范圍,
# 在繪制柱狀圖時,會使用這些誤差數據來繪制誤差線,以展示數據的不確定性
error = [2, 1, 2.5, 2, 1.5]# 定義柱狀圖的寬度,這里設置為 0.3,它會影響柱狀圖在 x 軸上的寬窄程度
bar_width = 0.3# 設置圖形的標題,標題內容為 '5 個月的溫度堆積柱形圖',讓讀者一眼就能知道這個圖形所展示的內容
plt.title('5個月的溫度堆積柱形圖')
# 設置 x 軸的標簽,標簽內容為 '月份',明確 x 軸數據所代表的含義
plt.xlabel('月份')
# 設置 y 軸的標簽,標簽內容為 '溫度',明確 y 軸數據所代表的含義
plt.ylabel('溫度')# 使用 for 循環遍歷 x 和 y1 數據,zip 函數將 x 和 y1 中對應的元素一一配對,
# 每次循環取出一個月份和對應的最高溫度值
for a, b in zip(x, y1):# 在每個最高溫度柱狀圖的上方添加文本標簽,用于顯示具體的溫度值。# plt.text 函數的參數解釋如下:# a:文本標簽的 x 坐標位置,即對應的月份# b + 1:文本標簽的 y 坐標位置,在最高溫度值的基礎上向上偏移 1 個單位,使標簽不與柱狀圖重疊# '%d' % b:將最高溫度值格式化為整數形式的字符串,作為文本標簽的內容# ha='center':設置文本的水平對齊方式為居中對齊,使標簽在柱狀圖上方居中顯示# va='center':設置文本的垂直對齊方式為居中對齊plt.text(a, b + 1, '%d' % b, ha='center', va='center')
# 繪制最高溫度的柱狀圖,plt.bar 函數的參數解釋如下:
# x:柱狀圖的 x 軸位置,即月份
# y1:柱狀圖的高度,即最高溫度值
# width=bar_width:柱狀圖的寬度,使用之前定義的 bar_width 值
plt.bar(x, y1, width=bar_width)# 同樣使用 for 循環遍歷 x 和 y2 數據,將每個月份和對應的最低溫度值配對
for a, b in zip(x, y2):# 在每個最低溫度柱狀圖的上方添加文本標簽,顯示具體的溫度值。# b - 1:文本標簽的 y 坐標位置,在最低溫度值的基礎上向下偏移 1 個單位# va='baseline':設置文本的垂直對齊方式為基線對齊plt.text(a, b - 1, '%d' % b, ha='center', va='baseline')
# 繪制最低溫度的柱狀圖,使其堆積在最高溫度柱狀圖的上方。
# plt.bar 函數的參數解釋如下:
# x:柱狀圖的 x 軸位置,即月份
# y2:柱狀圖的高度,即最低溫度值
# bottom=y1:指定柱狀圖的底部位置,將最低溫度柱狀圖堆積在最高溫度柱狀圖上方
# width=bar_width:柱狀圖的寬度
# yerr = error:為柱狀圖添加誤差線,誤差范圍由 error 列表指定
plt.bar(x, y2, bottom=y1, width=bar_width, yerr=error)# 為圖形添加圖例,圖例用于說明圖形中不同元素所代表的含義。
# 傳入一個列表 ['最高溫度', '最低溫度'],分別對應之前繪制的最高溫度和最低溫度柱狀圖。
# shadow=True:為圖例添加陰影效果,使其更具立體感
# fancybox=True:將圖例的邊框設置為圓角樣式,讓圖例外觀更美觀
plt.legend(['最高溫度', '最低溫度'], shadow=True, fancybox=True)
# 顯示繪制好的圖形,調用該函數后,圖形窗口會彈出顯示繪制的溫度堆積柱狀圖
plt.show()
?二、案例二:公司各部支出
import matplotlib.pyplot as plt
import pandas as pdplt.figure(num='圖', figsize=(12, 6), facecolor='w')plt.rcParams['font.sans-serif'] = 'KaiTi'df = pd.read_excel('某公司各部門1—2月份實際支出.xlsx')# 從 DataFrame 中提取 '部門' 列的數據,作為柱狀圖的 x 軸標簽
x = df['部門']# 定義誤差棒的高度,這是一個列表,列表中的每個元素對應每個部門的誤差值,后續繪制柱狀圖時會用到這些誤差值來繪制誤差棒
error = [1000, 200, 150, 100, 100, 500, 1000, 880]# 定義柱狀圖的寬度,該值會影響柱狀圖在 x 軸上的寬窄程度
bar_width = 0.4plt.title('某公司各部門1—2月份實際支出簇狀柱形圖', fontsize=20, fontproperties='SimHei')plt.ylabel('實際支出(元)', fontsize=15)# 使用 for 循環遍歷 x 軸標簽、1 月數據和 2 月數據,zip 函數將這三個序列中的對應元素一一配對
for a, b, c in zip(x, df['1月'], df['2月']):# 在每個 1 月支出柱狀圖的中間位置添加文本標簽,顯示具體的支出值# a:文本標簽的 x 坐標位置,即部門名稱對應的位置# b / 2:文本標簽的 y 坐標位置,在 1 月支出值的一半高度處# '%d' % b:將 1 月支出值格式化為整數形式的字符串,作為文本標簽的內容# ha='center':設置文本的水平對齊方式為居中對齊# va='center':設置文本的垂直對齊方式為居中對齊plt.text(a, b / 2, '%d' % b, ha='center', va='center')# 在每個 2 月支出柱狀圖的中間位置添加文本標簽,顯示具體的支出值# b + c / 2:文本標簽的 y 坐標位置,在 1 月和 2 月支出總和的一半高度處plt.text(a, b + c / 2, '%d' % c, ha='center', va='center')# 繪制 1 月支出的柱狀圖
# x:柱狀圖的 x 軸位置,即部門名稱
# df['1月']:柱狀圖的高度,即 1 月各部門的實際支出值
# width=bar_width:柱狀圖的寬度
# color='g':設置柱狀圖的顏色為綠色
plt.bar(x, df['1月'], width=bar_width, color='g')# 繪制 2 月支出的柱狀圖,使其堆積在 1 月支出柱狀圖的上方
# x:柱狀圖的 x 軸位置,即部門名稱
# df['2月']:柱狀圖的高度,即 2 月各部門的實際支出值
# bottom=df['1月']:指定柱狀圖的底部位置,將 2 月支出柱狀圖堆積在 1 月支出柱狀圖上方
# yerr=error:為柱狀圖添加誤差棒,誤差范圍由 error 列表指定
# width=bar_width:柱狀圖的寬度
# color='salmon':設置柱狀圖的顏色為鮭魚色
plt.bar(x, df['2月'], bottom=df['1月'], yerr=error, width=bar_width, color='salmon')# 為圖形添加圖例,說明不同顏色的柱狀圖所代表的含義
# ['1月', '2月']:傳入一個列表,分別對應 1 月和 2 月支出的柱狀圖
plt.legend(['1月', '2月'])# 將繪制好的圖形保存為圖片文件,文件名為 '某公司堆圖.png'
plt.savefig('某公司堆圖.png')# 顯示繪制好的圖形,調用該函數后,圖形窗口會彈出顯示繪制的柱狀圖
plt.show()
三、案例三:不同產品銷售額
?
import matplotlib.pyplot as plt
import pandas as pdplt.figure(num='圖', figsize=(12, 8), facecolor='w')# 設置 matplotlib 使用的字體為楷體,以確保圖形中的中文能正常顯示,因為默認字體可能無法正確顯示中文
plt.rcParams['font.sans-serif'] = 'KaiTi'
# 解決負號顯示問題,默認情況下 matplotlib 可能無法正確顯示負號,將該參數設置為 False 可解決此問題
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel('不同產品各季度的銷售額.xlsx')
# 從 DataFrame 中提取 '季度' 列的數據,作為柱狀圖的 x 軸標簽
x = df['季度']
# 從 DataFrame 中提取 '產品A' 列的數據,作為產品 A 的銷售額數據
y1 = df['產品A']
# 從 DataFrame 中提取 '產品B' 列的數據,作為產品 B 的銷售額數據
y2 = df['產品B']
# 從 DataFrame 中提取 '產品C' 列的數據,作為產品 C 的銷售額數據
y3 = df['產品C']plt.title('不同產品各季度的銷售額', fontsize=20)plt.ylabel('銷售額(元)', fontsize=14)plt.ylim(0, 12000)# 定義柱狀圖的寬度,該值會影響柱狀圖在 x 軸上的寬窄程度
bar_width = 0.3plt.bar(x, y3, width=bar_width)
plt.bar(x, y2, bottom=y3, width=bar_width)
plt.bar(x, y1, bottom=y2, width=bar_width)# 使用 for 循環遍歷 x 軸標簽、產品 C、產品 B 和產品 A 的銷售額數據,zip 函數將這四個序列中的對應元素一一配對
for a, b, c, d in zip(x, y3, y2, y1):# 在產品 C 銷售額柱狀圖的中間位置添加文本標簽,顯示具體的銷售額值# a:文本標簽的 x 坐標位置,即季度對應的位置# b / 2:文本標簽的 y 坐標位置,在產品 C 銷售額值的一半高度處# '%d' % b:將產品 C 銷售額值格式化為整數形式的字符串,作為文本標簽的內容# ha='center':設置文本的水平對齊方式為居中對齊plt.text(a, b / 2, '%d' % b, ha='center')# 在產品 B 銷售額柱狀圖的中間位置添加文本標簽,顯示具體的銷售額值# b + c / 2:文本標簽的 y 坐標位置,在產品 C 和產品 B 銷售額總和的一半高度處plt.text(a, b + c / 2, '%d' % c, ha='center')# 在產品 A 銷售額柱狀圖的中間位置添加文本標簽,顯示具體的銷售額值# b + c + d / 2:文本標簽的 y 坐標位置,在產品 C、產品 B 和產品 A 銷售額總和的一半高度處plt.text(a, b + c + d / 2, '%d' % d, ha='center')plt.legend(['產品A', '產品B', '產品C'], shadow=True, fancybox=True)plt.show()