人工智能之數據分析 Matplotlib

第四章 圖形類型


(文章目錄)


前言

Matplotlib 支持多種圖表類型。本文將詳細介紹 散點圖、柱形圖、餅圖、直方圖 以及其他常見圖表(如箱線圖、熱力圖、面積圖、3D 圖等)的繪製方法、參數説明和典型應用場景。


一、散點圖(Scatter Plot)

用途

顯示兩個變量之間的關係,常用於觀察相關性、聚類或異常值。

基本語法

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, alpha=None)
  • x, y:數據點座標
  • s:點的大小(可為標量或數組)
  • c:顏色(可為單色、顏色列表或數值映射到 colormap)
  • marker:標記樣式(如 'o', '^', 's'
  • alpha:透明度(0~1)
  • cmap:顏色映射(配合數值型 c 使用)

示例

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(100)
y = np.random.randn(100)
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)

plt.scatter(x, y, c=colors, s=sizes, alpha=0.6, cmap='viridis')
plt.colorbar()  # 顯示顏色條
plt.title("Scatter Plot with Color and Size")
plt.show()


二、柱形圖(Bar Chart)

用途

比較不同類別之間的數值大小。

垂直柱形圖

plt.bar(x, height, width=0.8, color=None, label=None)

水平柱形圖

plt.barh(y, width, height=0.8)

示例

categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 9]

plt.bar(categories, values, color='skyblue')
plt.title("Bar Chart")
plt.ylabel("Value")
plt.show()

💡 可疊加多個 bar() 實現分組或堆疊柱狀圖。


三、餅圖(Pie Chart)

用途

顯示各部分佔總體的比例(適用於分類較少的情況)。

基本語法

plt.pie(sizes, labels=None, autopct=None, startangle=0, explode=None, colors=None)
  • sizes:各扇區大小(自動歸一化)
  • labels:標籤
  • autopct='%1.1f%%':顯示百分比
  • explode:突出某一部分(如 [0, 0.1, 0, 0]
  • startangle:起始角度(默認從 x 軸開始)

示例

sizes = [25, 35, 20, 20]
labels = ['Apple', 'Banana', 'Cherry', 'Date']
explode = (0, 0.1, 0, 0)  # 突出 Banana

plt.pie(sizes, labels=labels, autopct='%1.1f%%', explode=explode, startangle=90)
plt.title("Pie Chart")
plt.axis('equal')  # 保證圓形
plt.show()


四、直方圖(Histogram)

用途

展示數據的分佈情況(頻率分佈)。

基本語法

plt.hist(data, bins=10, range=None, density=False, alpha=1.0, color=None)
  • data:一維數組
  • bins:分箱數量(整數或邊界列表)
  • density=True:歸一化為概率密度(面積=1)
  • alpha:透明度(便於疊加多個直方圖)

示例

data = np.random.normal(100, 15, 1000)  # 正態分佈

plt.hist(data, bins=30, color='lightgreen', edgecolor='black', alpha=0.7)
plt.title("Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()


五、其他常用圖表

1. 折線圖(Line Plot)

plt.plot(x, y, linestyle='-', marker='o')

最基礎的連續數據趨勢圖。


2. 箱線圖(Box Plot)

顯示數據的五數概括(最小值、Q1、中位數、Q3、最大值)及異常值。

plt.boxplot([data1, data2], labels=['Group1', 'Group2'])


3. 面積圖(Area Plot)

強調累積總量隨時間的變化。

plt.stackplot(x, y1, y2, labels=['A', 'B'], alpha=0.7)


4. 熱力圖(Heatmap)

用顏色表示矩陣中數值大小(需結合 imshowpcolormesh)。

data = np.random.rand(10, 10)
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.title("Heatmap")
plt.show()

更推薦使用 Seabornsns.heatmap(),功能更強大。


5. 3D 圖(需 mpl_toolkits.mplot3d

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)
ax.scatter(x, y, z)
plt.show()


6. 子圖(Multiple Subplots)

使用 plt.subplots() 創建多圖佈局:

import matplotlib.pyplot as plt import numpy as np  
# 創建 2x2 子圖 
fig, axs = plt.subplots(2, 2, figsize=(10, 8))  
# 第一個子圖:折線圖 
x = np.linspace(0, 10, 100) 
y = np.sin(x) 
axs[0, 0].plot(x, y) 
axs[0, 0].set_title('Sine Wave')  
# 第二個子圖:散點圖 
axs[0, 1].scatter([1, 2, 3], [4, 5, 6]) 
axs[0, 1].set_title('Scatter')  
# 第三個:柱狀圖 
axs[1, 0].bar(['A', 'B', 'C'], [3, 7, 5]) 
axs[1, 0].set_title('Bar Chart')  
# 第四個:直方圖 
data = np.random.randn(1000) 
axs[1, 1].hist(data, bins=20) 
axs[1, 1].set_title('Histogram')  
plt.tight_layout() 
plt.show()


六、選擇建議

圖表類型 適用場景
散點圖 兩變量關係、聚類分析
柱形圖 類別間比較
餅圖 構成比例(類別 ≤ 5)
直方圖 數據分佈形態
箱線圖 分佈離散程度、異常值檢測
折線圖 時間序列、趨勢變化
熱力圖 矩陣/相關性可視化

補充:美化建議

  • 使用 plt.style.use('seaborn-v0_8')'ggplot' 改變整體風格
  • 設置字體:plt.rcParams['font.sans-serif'] = ['SimHei'](中文支持)
  • 保存圖像:plt.savefig('chart.png', dpi=300, bbox_inches='tight')

後續

python過渡項目部分代碼已經上傳至gitee,後續會逐步更新。

資料關注

公眾號:咚咚王 gitee:https://gitee.com/wy18585051844/ai_learning

《Python編程:從入門到實踐》 《利用Python進行數據分析》 《算法導論中文第三版》 《概率論與數理統計(第四版) (盛驟) 》 《程序員的數學》 《線性代數應該這樣學第3版》 《微積分和數學分析引論》 《(西瓜書)周志華-機器學習》 《TensorFlow機器學習實戰指南》 《Sklearn與TensorFlow機器學習實用指南》 《模式識別(第四版)》 《深度學習 deep learning》伊恩·古德費洛著 花書 《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》 《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen)》 《自然語言處理綜論 第2版》 《Natural-Language-Processing-with-PyTorch》 《計算機視覺-算法與應用(中文版)》 《Learning OpenCV 4》 《AIGC:智能創作時代》杜雨+&+張孜銘 《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》 《從零構建大語言模型(中文版)》 《實戰AI大模型》 《AI 3.0》