人工智能之數據分析 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)
用顏色表示矩陣中數值大小(需結合 imshow 或 pcolormesh)。
data = np.random.rand(10, 10)
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.title("Heatmap")
plt.show()
更推薦使用 Seaborn 的
sns.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》