【深度學習-Day 8】讓數據說話:Python 可視化雙雄 Matplotlib 與 Seaborn 教程

Langchain系列文章目錄

01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南
02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋
03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南
04-玩轉 LangChain:從文檔加載到高效問答系統構建的全程實戰
05-玩轉 LangChain:深度評估問答系統的三種高效方法(示例生成、手動評估與LLM輔助評估)
06-從 0 到 1 掌握 LangChain Agents:自定義工具 + LLM 打造智能工作流!
07-【深度解析】從GPT-1到GPT-4:ChatGPT背后的核心原理全揭秘
08-【萬字長文】MCP深度解析:打通AI與世界的“USB-C”,模型上下文協議原理、實踐與未來

Python系列文章目錄

PyTorch系列文章目錄

機器學習系列文章目錄

深度學習系列文章目錄

Java系列文章目錄

JavaScript系列文章目錄

深度學習系列文章目錄

01-【深度學習-Day 1】為什么深度學習是未來?一探究竟AI、ML、DL關系與應用
02-【深度學習-Day 2】圖解線性代數:從標量到張量,理解深度學習的數據表示與運算
03-【深度學習-Day 3】搞懂微積分關鍵:導數、偏導數、鏈式法則與梯度詳解
04-【深度學習-Day 4】掌握深度學習的“概率”視角:基礎概念與應用解析
05-【深度學習-Day 5】Python 快速入門:深度學習的“瑞士軍刀”實戰指南
06-【深度學習-Day 6】掌握 NumPy:ndarray 創建、索引、運算與性能優化指南
07-【深度學習-Day 7】精通Pandas:從Series、DataFrame入門到數據清洗實戰
08-【深度學習-Day 8】讓數據說話:Python 可視化雙雄 Matplotlib 與 Seaborn 教程


文章目錄

  • Langchain系列文章目錄
  • Python系列文章目錄
  • PyTorch系列文章目錄
  • 機器學習系列文章目錄
  • 深度學習系列文章目錄
  • Java系列文章目錄
  • JavaScript系列文章目錄
  • 深度學習系列文章目錄
  • 前言
  • 一、為什么需要數據可視化?
    • 1.1 直觀理解數據
    • 1.2 發現模式與趨勢
    • 1.3 清晰傳達結果
  • 二、Matplotlib:Python 可視化的基石
    • 2.1 Matplotlib 簡介
      • 2.1.1 什么是 Matplotlib?
      • 2.1.2 安裝 Matplotlib
    • 2.2 Matplotlib 核心概念
      • 2.2.1 Figure 與 Axes
      • 2.2.2 Pyplot 接口
    • 2.3 繪制基本圖形
      • 2.3.1 折線圖 (Line Plot)
        • (1)應用場景
        • (2)代碼示例
      • 2.3.2 散點圖 (Scatter Plot)
        • (1)應用場景
        • (2)代碼示例
      • 2.3.3 柱狀圖 (Bar Plot)
        • (1)應用場景
        • (2)代碼示例
    • 2.4 圖像定制化
      • 2.4.1 添加標題和標簽
      • 2.4.2 修改顏色、線型和標記
      • 2.4.3 添加圖例
      • 2.4.4 代碼示例:綜合定制
  • 三、Seaborn:讓可視化更美觀
    • 3.1 Seaborn 簡介
      • 3.1.1 什么是 Seaborn?
      • 3.1.2 Seaborn 與 Matplotlib 的關系
      • 3.1.3 安裝 Seaborn
    • 3.2 使用 Seaborn 增強可視化
      • 3.2.1 風格設置
      • 3.2.2 常用繪圖函數
        • (1)關系圖 (Relational Plots)
        • (2)分類圖 (Categorical Plots)
        • (3)分布圖 (Distribution Plots)
        • (4)熱力圖 (Heatmaps)
      • 3.2.3 代碼示例:使用 Seaborn 繪制美觀圖形
  • 四、實戰:可視化 NumPy 與 Pandas 數據
    • 4.1 使用 Matplotlib 可視化 NumPy 數組
      • 4.1.1 場景描述
      • 4.1.2 代碼示例
    • 4.2 使用 Seaborn 可視化 Pandas DataFrame
      • 4.2.1 場景描述
      • 4.2.2 代碼示例
  • 五、常見問題與選擇建議
    • 5.1 Matplotlib vs Seaborn:何時選擇哪個?
    • 5.2 圖像不顯示或中文亂碼問題
        • (1)圖像不顯示
        • (2)中文亂碼問題
  • 六、總結


前言

在深度學習的征途中,我們不僅需要與冰冷的數字和復雜的算法打交道,更需要一種直觀的方式來理解數據、洞察模型行為并有效地展示研究成果。“一圖勝千言”,數據可視化正是連接數據與洞察的橋梁。它能夠幫助我們發現隱藏在數據背后的模式、趨勢和異常點,從而更好地指導我們的數據分析和模型調優工作。

在 Python 的生態系統中,Matplotlib 和 Seaborn 是兩個功能強大且廣受歡迎的數據可視化庫。Matplotlib 提供了靈活的底層繪圖接口,幾乎可以繪制任何類型的靜態、動態、交互式圖表。而 Seaborn 則構建于 Matplotlib 之上,提供了更高級別的接口,使得創建美觀且信息豐富的統計圖形變得更加容易。

本篇文章作為深度學習基礎準備階段的第八篇,將帶領大家系統學習如何使用 Matplotlib 和 Seaborn 這兩大神器,讓您的數據和模型結果“說話”,為后續的深度學習實踐打下堅實的視覺分析基礎。

一、為什么需要數據可視化?

在深入學習具體的繪圖庫之前,我們首先需要理解數據可視化為什么如此重要。簡單來說,數據可視化主要有以下三個方面的核心價值:

1.1 直觀理解數據

人類大腦對視覺信息的處理遠勝于對抽象數字的處理。通過將數據轉換成圖形,我們可以更快速、更直觀地把握數據的分布、集中趨勢、離散程度等關鍵特征。例如,一組看似雜亂無章的銷售數據,通過折線圖可以清晰地展示其隨時間的變化趨勢。

1.2 發現模式與趨勢

數據可視化是探索性數據分析(EDA)的關鍵環節。通過繪制不同類型的圖表,我們可以更容易地發現數據中隱藏的模式、相關性、聚類以及異常值。這些發現對于特征工程、模型選擇和問題診斷至關重要。例如,通過散點圖矩陣,我們可以快速識別不同特征之間的線性或非線性關系。

1.3 清晰傳達結果

無論是學術研究、商業報告還是項目演示,清晰、有效地傳達分析結果都至關重要。精美的圖表不僅能讓觀眾更容易理解復雜的分析結果,還能增強報告的說服力和專業性。一個精心設計的可視化作品,其傳遞信息的效率遠高于冗長的文字描述。

二、Matplotlib:Python 可視化的基石

Matplotlib 是 Python 中應用最廣泛的繪圖庫,它幾乎是所有其他 Python 可視化庫(包括 Seaborn)的基礎。學習 Matplotlib 能讓我們掌握最底層的繪圖邏輯,從而實現高度定制化的可視化需求。

2.1 Matplotlib 簡介

2.1.1 什么是 Matplotlib?

Matplotlib 是一個用于創建高質量靜態、動態和交互式可視化的 Python 庫。它提供了一個類似 MATLAB 的繪圖框架,使得用戶可以輕松生成各種類型的圖表,如折線圖、散點圖、柱狀圖、直方圖、餅圖等。Matplotlib 的設計理念是盡可能地讓簡單的事情簡單化,讓復雜的事情成為可能。

2.1.2 安裝 Matplotlib

在開始使用 Matplotlib 之前,我們需要先安裝它。如果您使用的是 Anaconda 或 Miniconda,可以通過以下命令在終端或 Anaconda Prompt 中安裝:

conda install matplotlib

如果您使用的是 pip,則可以使用以下命令:

pip install matplotlib

安裝完成后,我們就可以在 Python 腳本或 Jupyter Notebook 中導入并使用它了。

import matplotlib.pyplot as plt
import numpy as np # 通常與 NumPy 結合使用

2.2 Matplotlib 核心概念

理解 Matplotlib 的核心組件是高效使用它的關鍵。

2.2.1 Figure 與 Axes

在 Matplotlib 中,最頂層的容器是 Figure,可以將其理解為一個畫布,所有的繪圖元素都將放置在這個畫布上。一個 Figure 對象可以包含一個或多個 Axes 對象。

Axes(軸域)才是真正進行繪圖的區域,它代表了圖表中的一個子圖。一個 Axes 對象通常包含兩個(或三個,對于3D圖)Axis 對象(坐標軸),用于定義數據的范圍和刻度。我們可以在一個 Figure 上創建多個 Axes,從而實現多子圖的布局。

2.2.2 Pyplot 接口

matplotlib.pyplot 是 Matplotlib 的一個模塊,它提供了一個類似 MATLAB 的命令式函數集合,用于快速、便捷地創建圖表。通常,我們將其導入為 pltpyplot 模塊會自動管理當前的 FigureAxes 對象,使得我們可以直接調用繪圖函數而無需顯式地創建它們。

2.3 繪制基本圖形

接下來,我們將學習如何使用 pyplot 接口繪制幾種常見的圖形。

2.3.1 折線圖 (Line Plot)

折線圖通常用于顯示數據隨某個連續變量(如時間)變化的趨勢。

(1)應用場景
  • 展示股票價格隨時間的變化。
  • 顯示實驗測量值隨參數的變化。
  • 可視化模型訓練過程中的損失值或準確率變化。
(2)代碼示例
import matplotlib.pyplot as plt
import numpy as np# 準備數據
x = np.linspace(0, 10, 100) # 生成0到10之間的100個點
y1 = np.sin(x)
y2 = np.cos(x)# 創建一個Figure和一個Axes
fig, ax = plt.subplots()# 繪制折線圖
ax.plot(x, y1, label='sin(x)') # 繪制 y1
ax.plot(x, y2, label='cos(x)') # 繪制 y2# 添加標題和標簽
ax.set_title('簡單折線圖示例')
ax.set_xlabel('X 軸')
ax.set_ylabel('Y 軸')# 添加圖例
ax.legend()# 顯示圖形
plt.show()

代碼解釋:

  • np.linspace(0, 10, 100): 創建一個包含100個從0到10等間隔的數值的NumPy數組。
  • plt.subplots(): 創建一個 Figure 對象和一個 Axes 對象。這是推薦的繪圖方式,可以更好地控制圖形的各個部分。
  • ax.plot(x, y1, label='sin(x)'): 在 ax (Axes對象) 上繪制折線圖。label 參數用于后續生成圖例。
  • ax.set_title(), ax.set_xlabel(), ax.set_ylabel(): 設置圖形的標題和坐標軸標簽。
  • ax.legend(): 顯示圖例,它會根據 plot 函數中的 label 參數自動生成。
  • plt.show(): 顯示繪制好的圖形。

2.3.2 散點圖 (Scatter Plot)

散點圖用于展示兩個變量之間的關系,每個點代表一個數據樣本。

(1)應用場景
  • 觀察兩個特征之間的相關性。
  • 識別數據中的聚類或異常點。
  • 比較不同組別的數據分布。
(2)代碼示例
import matplotlib.pyplot as plt
import numpy as np# 準備數據
np.random.seed(0) # 設置隨機種子以保證結果可復現
x = np.random.rand(50) # 50個0到1之間的隨機數
y = 2 * x + 1 + np.random.randn(50) * 0.3 # y = 2x + 1 + 噪聲
colors = np.random.rand(50) # 為每個點生成隨機顏色
sizes = 100 * np.random.rand(50) # 為每個點生成隨機大小# 創建一個Figure和一個Axes
fig, ax = plt.subplots()# 繪制散點圖
scatter = ax.scatter(x, y, c=colors, s=sizes, alpha=0.7, cmap='viridis') # c=顏色, s=大小, alpha=透明度, cmap=顏色映射# 添加標題和標簽
ax.set_title('散點圖示例')
ax.set_xlabel('X 值')
ax.set_ylabel('Y 值')# 添加顏色條 (colorbar)
fig.colorbar(scatter, label='顏色值')# 顯示圖形
plt.show()

代碼解釋:

  • np.random.seed(0): 確保每次運行代碼時生成的隨機數都是一樣的,便于復現。
  • ax.scatter(): 繪制散點圖。
    • c=colors: 指定每個點的顏色。
    • s=sizes: 指定每個點的大小。
    • alpha=0.7: 設置點的透明度,當點重疊時很有用。
    • cmap='viridis': 指定顏色映射方案,將 colors 數組中的數值映射到具體的顏色。
  • fig.colorbar(scatter, label='顏色值'): 為散點圖添加一個顏色條,用于解釋顏色與數值的對應關系。

2.3.3 柱狀圖 (Bar Plot)

柱狀圖用于比較不同類別的數據大小。

(1)應用場景
  • 比較不同產品的銷量。
  • 展示不同城市的人口數量。
  • 可視化分類特征的頻數分布。
(2)代碼示例
import matplotlib.pyplot as plt# 準備數據
categories = ['類別 A', '類別 B', '類別 C', '類別 D']
values = [25, 40, 30, 50]# 創建一個Figure和一個Axes
fig, ax = plt.subplots()# 繪制柱狀圖
bars = ax.bar(categories, values, color=['skyblue', 'lightcoral', 'lightgreen', 'gold'])# 添加標題和標簽
ax.set_title('柱狀圖示例')
ax.set_xlabel('類別')
ax.set_ylabel('數量')# 在每個柱子上方顯示數值
for bar in bars:yval = bar.get_height()plt.text(bar.get_x() + bar.get_width()/2.0, yval + 1, round(yval, 1), ha='center', va='bottom')# 顯示圖形
plt.show()

代碼解釋:

  • ax.bar(categories, values, color=...): 繪制柱狀圖。color 參數可以是一個顏色列表,為每個柱子指定不同的顏色。
  • 循環部分 (for bar in bars: ...): 用于在每個柱子的頂部顯示其對應的數值,增強可讀性。
    • bar.get_height(): 獲取柱子的高度。
    • bar.get_x(): 獲取柱子左下角的 x 坐標。
    • bar.get_width(): 獲取柱子的寬度。
    • plt.text(): 在指定位置添加文本。

2.4 圖像定制化

Matplotlib 提供了豐富的選項來定制圖形的各個方面,使其更具表現力和美觀性。

2.4.1 添加標題和標簽

如前面的示例所示,可以使用 ax.set_title(), ax.set_xlabel(), ax.set_ylabel() 來為圖形和坐標軸添加標題和標簽。還可以通過 fontsize 參數調整字體大小。

ax.set_title('定制化標題', fontsize=16)
ax.set_xlabel('X 軸標簽', fontsize=12)
ax.set_ylabel('Y 軸標簽', fontsize=12)

2.4.2 修改顏色、線型和標記

plot 函數中,可以通過參數控制線條的顏色 (color)、線型 (linestyle) 和數據點的標記 (marker)。

  • 顏色 (color): 可以使用預定義的顏色名稱(如 ‘red’, ‘blue’, ‘green’)、十六進制顏色碼(如 ‘#FF5733’)或 RGB 元組。
  • 線型 (linestyle): 常用的有 ‘-’ (實線), ‘–’ (虛線), ‘:’ (點線), ‘-.’ (點劃線)。
  • 標記 (marker): 用于標記數據點,如 ‘o’ (圓圈), ‘.’ (點), ‘,’ (像素), ‘s’ (正方形), ‘^’ (上三角)。

2.4.3 添加圖例

當一個圖形中包含多條線或多個數據集時,圖例 (legend) 就非常重要。通過在繪圖函數中設置 label 參數,然后調用 ax.legend() 即可顯示圖例。

ax.legend(loc='upper right', fontsize=10) # loc 參數可以控制圖例的位置

2.4.4 代碼示例:綜合定制

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, 50)
y_sin = np.sin(x)
y_cos = np.cos(x)fig, ax = plt.subplots(figsize=(8, 6)) # figsize 控制畫布大小ax.plot(x, y_sin,color='purple',       # 線條顏色linestyle='--',      # 線型為虛線linewidth=2,         # 線條寬度marker='o',          # 數據點標記為圓圈markersize=5,        # 標記大小markerfacecolor='yellow', # 標記填充顏色markeredgecolor='red',   # 標記邊緣顏色label='Sin Wave')ax.plot(x, y_cos,color='#2E8B57',     # SeaGreen 的十六進制碼linestyle=':',       # 線型為點線linewidth=2,marker='s',markersize=5,label='Cos Wave')ax.set_title('定制化折線圖', fontsize=18, fontweight='bold') # fontweight 設置字體粗細
ax.set_xlabel('弧度 (Radians)', fontsize=14)
ax.set_ylabel('函數值', fontsize=14)ax.grid(True, linestyle=':', alpha=0.7) # 添加網格線
ax.legend(loc='lower left', fontsize=12, shadow=True, frameon=True, facecolor='lightgray') # 更豐富的圖例設置# 設置坐標軸范圍
ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.5, 1.5)# 設置刻度
ax.set_xticks(np.linspace(0, 2 * np.pi, 5)) # 設置 X 軸刻度點
ax.set_xticklabels(['0', 'π/2', 'π', '3π/2', '2π']) # 設置 X 軸刻度標簽plt.tight_layout() # 自動調整子圖參數,使之填充整個圖像區域
plt.show()

代碼解釋:

  • figsize=(8, 6): 在創建 Figure 時指定其寬度和高度(單位為英寸)。
  • linewidth: 控制線條的寬度。
  • markerfacecolor, markeredgecolor: 分別設置數據點標記的填充顏色和邊緣顏色。
  • ax.grid(True, ...): 添加網格線,linestylealpha 可以分別設置網格線的樣式和透明度。
  • ax.legend(...): 提供了更多圖例定制選項,如 shadow (陰影), frameon (邊框), facecolor (背景色)。
  • ax.set_xlim(), ax.set_ylim(): 設置 X 軸和 Y 軸的顯示范圍。
  • ax.set_xticks(), ax.set_xticklabels(): 自定義坐標軸的刻度位置和標簽。
  • plt.tight_layout(): 自動調整布局,防止標簽重疊或超出邊界。

三、Seaborn:讓可視化更美觀

雖然 Matplotlib 功能強大且靈活,但有時為了創建具有統計意義且美觀的圖形,需要編寫較多的樣板代碼。Seaborn 的出現正是為了簡化這一過程,它提供了更高級別的接口,專注于統計可視化。

3.1 Seaborn 簡介

3.1.1 什么是 Seaborn?

Seaborn 是一個基于 Matplotlib 的 Python 數據可視化庫。它提供了一個高級界面,用于繪制引人入勝且信息豐富的統計圖形。Seaborn 的目標是使可視化成為數據探索和理解的核心部分。

3.1.2 Seaborn 與 Matplotlib 的關系

Seaborn 是建立在 Matplotlib 之上的。這意味著 Seaborn 使用 Matplotlib 來實際渲染圖形。因此,您通常可以將 Matplotlib 的定制命令與 Seaborn 圖形結合使用。可以理解為 Seaborn 是 Matplotlib 的一個更高級、更專注統計的封裝。

3.1.3 安裝 Seaborn

與 Matplotlib 類似,可以使用 conda 或 pip 安裝 Seaborn:

conda install seaborn

或者:

pip install seaborn

通常,我們會將 Seaborn 導入為 sns

import seaborn as sns
import matplotlib.pyplot as plt # 通常也需要導入 Matplotlib 進行微調

3.2 使用 Seaborn 增強可視化

Seaborn 的強大之處在于其內置的統計功能和美觀的默認樣式。

3.2.1 風格設置

Seaborn 提供了多種內置的主題和顏色方案,可以輕松改變圖形的整體外觀。

sns.set_theme(style="darkgrid") # 設置主題,可選:"whitegrid", "dark", "white", "ticks"
# sns.set_style("whitegrid") # 另一種設置風格的方式
# sns.set_palette("pastel") # 設置調色板

只需在繪圖代碼之前調用這些函數,后續的 Seaborn (甚至 Matplotlib) 圖形都會應用這些風格。

3.2.2 常用繪圖函數

Seaborn 提供了許多專門用于統計分析的繪圖函數,通常它們能夠更好地處理 Pandas DataFrame。

(1)關系圖 (Relational Plots)

用于可視化兩個變量之間的關系。

  • sns.relplot(): Figure-level 接口,可以創建散點圖 (kind="scatter", 默認) 或線圖 (kind="line")。
  • sns.scatterplot(): Axes-level 散點圖。
  • sns.lineplot(): Axes-level 折線圖,可以自動計算聚合統計量(如均值和置信區間)。
(2)分類圖 (Categorical Plots)

用于可視化一個數值變量與一個或多個分類變量之間的關系。

  • sns.catplot(): Figure-level 接口,支持多種分類圖,如:
    • 散點圖: kind="strip" (默認), kind="swarm"
    • 分布圖: kind="box", kind="violin", kind="boxen"
    • 估計圖: kind="point", kind="bar", kind="count"
  • Axes-level 函數如 sns.boxplot(), sns.violinplot(), sns.barplot(), sns.countplot(), sns.stripplot(), sns.swarmplot()
(3)分布圖 (Distribution Plots)

用于可視化單個變量的分布或多個變量的聯合分布。

  • sns.displot(): Figure-level 接口,可以繪制直方圖 (kind="hist", 默認)、核密度估計圖 (kind="kde")、經驗累積分布函數圖 (kind="ecdf")。
  • sns.histplot(): Axes-level 直方圖。
  • sns.kdeplot(): Axes-level 核密度估計圖。
  • sns.ecdfplot(): Axes-level ECDF圖。
  • sns.rugplot(): 在軸上繪制小標記表示數據點。
  • sns.jointplot(): 繪制兩個變量的聯合分布和各自的邊緣分布。
  • sns.pairplot(): 繪制數據集中兩兩特征間的關系圖(散點圖或直方圖)。
(4)熱力圖 (Heatmaps)

用于將矩陣數據顯示為顏色編碼的圖像。

  • sns.heatmap(): 非常適合可視化相關性矩陣、混淆矩陣等。

3.2.3 代碼示例:使用 Seaborn 繪制美觀圖形

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# 設置 Seaborn 風格
sns.set_theme(style="whitegrid")# 1. 使用 Seaborn 繪制折線圖 (自動處理置信區間)
fmri = sns.load_dataset("fmri") # 加載 Seaborn 內置數據集
plt.figure(figsize=(8, 5)) # Matplotlib 的 figure 設置仍然適用
sns.lineplot(x="timepoint", y="signal", hue="event", style="region", data=fmri)
plt.title('Seaborn 折線圖 (fMRI 數據)', fontsize=15)
plt.show()# 2. 使用 Seaborn 繪制散點圖,并按類別著色
iris = sns.load_dataset("iris") # 加載鳶尾花數據集
plt.figure(figsize=(8, 5))
sns.scatterplot(x="sepal_length", y="sepal_width", hue="species", size="petal_length", data=iris, palette="viridis", alpha=0.8)
plt.title('Seaborn 散點圖 (Iris 數據集)', fontsize=15)
plt.show()# 3. 使用 Seaborn 繪制箱線圖 (Box Plot)
tips = sns.load_dataset("tips") # 加載小費數據集
plt.figure(figsize=(8, 5))
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set2")
plt.title('Seaborn 箱線圖 (Tips 數據集)', fontsize=15)
plt.show()# 4. 使用 Seaborn 繪制熱力圖 (Heatmap)
# 創建一個隨機的相關性矩陣數據
np.random.seed(42)
data = pd.DataFrame(np.random.rand(10, 10), columns=[f'Var{i}' for i in range(1, 11)])
correlation_matrix = data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", fmt=".2f", linewidths=.5)
# annot=True: 在單元格中顯示數值
# cmap="coolwarm": 設置顏色映射
# fmt=".2f": 設置數值格式(保留兩位小數)
# linewidths=.5: 設置單元格之間的線條寬度
plt.title('Seaborn 熱力圖 (相關性矩陣)', fontsize=15)
plt.show()

代碼解釋:

  • sns.load_dataset(): Seaborn 提供了一些內置的數據集,方便學習和測試。
  • hue: Seaborn 的一個強大參數,可以根據指定的列對數據進行分組,并用不同的顏色、標記或線型來區分。
  • style: 類似于 hue,但用不同的標記或線型區分。
  • palette: 控制顏色方案。
  • sns.boxplot(): 直觀地展示了不同類別下數據的分布情況,包括中位數、四分位數和異常值。
  • sns.heatmap(): 將數值矩陣可視化為顏色編碼的圖,常用于展示相關性矩陣。annot=True 可以在每個單元格中顯示數值。

四、實戰:可視化 NumPy 與 Pandas 數據

在實際的數據分析和機器學習項目中,我們通常會使用 NumPy 存儲數值數組,使用 Pandas 存儲和處理表格數據 (DataFrame)。Matplotlib 和 Seaborn 都能很好地與這兩個庫集成。

4.1 使用 Matplotlib 可視化 NumPy 數組

4.1.1 場景描述

假設我們有一些通過 NumPy 生成或處理的實驗數據,例如某個物理量隨時間變化的測量值,我們希望將其可視化。

4.1.2 代碼示例

import matplotlib.pyplot as plt
import numpy as np# 生成模擬數據
time = np.arange(0, 10, 0.1)  # 時間序列,從0到10,步長0.1
signal_A = np.exp(-time / 3.0) * np.sin(2 * np.pi * time) # 信號A:衰減正弦波
noise = np.random.normal(0, 0.1, len(time)) # 高斯噪聲
signal_B = signal_A + noise # 信號B:帶噪聲的信號A# 使用 Matplotlib 繪圖
fig, ax = plt.subplots(figsize=(10, 6))ax.plot(time, signal_A, label='原始信號 (Signal A)', color='blue', linestyle='-', linewidth=2)
ax.plot(time, signal_B, label='帶噪聲信號 (Signal B)', color='red', linestyle=':', linewidth=1.5, alpha=0.7)
# ax.scatter(time[::5], signal_B[::5], label='部分采樣點', color='green', marker='x') # 每隔5個點繪制一個標記ax.set_title('NumPy 數組可視化:信號與噪聲', fontsize=16)
ax.set_xlabel('時間 (s)', fontsize=14)
ax.set_ylabel('信號幅值', fontsize=14)
ax.legend(fontsize=12)
ax.grid(True, linestyle='--', alpha=0.6)plt.show()

這個例子展示了如何直接將 NumPy 數組傳遞給 Matplotlib 的 plot 函數進行繪圖,并進行相應的定制。

4.2 使用 Seaborn 可視化 Pandas DataFrame

4.2.1 場景描述

Pandas DataFrame 是處理結構化數據的標準方式。Seaborn 在設計上就非常適合直接操作 DataFrame,可以方便地根據列名來指定繪圖的變量。

4.2.2 代碼示例

假設我們有一個包含學生考試成績的 Pandas DataFrame,我們想分析不同科目成績的分布以及它們之間的關系。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# 生成模擬學生成績數據
np.random.seed(123)
data = {'學生ID': range(1, 101),'數學成績': np.random.randint(50, 100, 100),'英語成績': np.random.randint(40, 95, 100),'科學成績': np.random.randint(60, 100, 100),'班級': np.random.choice(['A班', 'B班', 'C班'], 100, p=[0.3, 0.4, 0.3])
}
df_scores = pd.DataFrame(data)# 1. 查看各科目成績的分布 (直方圖與核密度估計)
plt.figure(figsize=(12, 6))
sns.histplot(data=df_scores, x='數學成績', hue='班級', kde=True, multiple="stack")
# multiple="stack" 可以將不同班級的直方圖堆疊起來
plt.title('數學成績分布 (按班級)', fontsize=15)
plt.show()# 2. 查看數學成績與英語成績之間的關系 (散點圖,按班級區分)
plt.figure(figsize=(8, 6))
sns.scatterplot(data=df_scores, x='數學成績', y='英語成績', hue='班級', style='班級', s=80)
plt.title('數學成績 vs 英語成績 (按班級)', fontsize=15)
plt.show()# 3. 查看所有數值型特征兩兩之間的關系 (配對圖)
sns.pairplot(df_scores[['數學成績', '英語成績', '科學成績', '班級']], hue='班級', diag_kind='kde')
# diag_kind='kde' 在對角線上繪制核密度估計圖
plt.suptitle('成績數據配對關系圖 (按班級)', y=1.02, fontsize=16) # 為整個 pairplot 添加總標題
plt.show()# 4. 查看不同班級各科成績的箱線圖
plt.figure(figsize=(10, 6))
sns.boxplot(data=pd.melt(df_scores, id_vars=['學生ID', '班級'], value_vars=['數學成績', '英語成績', '科學成績'],var_name='科目', value_name='成績'),x='班級', y='成績', hue='科目')
# pd.melt 用于將寬格式數據轉換為長格式數據,方便 boxplot 按科目分組
plt.title('各班級科目成績箱線圖', fontsize=15)
plt.show()

代碼解釋:

  • pd.melt(): 這是一個非常有用的 Pandas 函數,可以將 DataFrame 從寬格式(每個科目一列)轉換為長格式(一列表示科目名稱,一列表示成績),這對于某些 Seaborn 繪圖函數(如 boxplot 分組顯示多個科目)非常方便。
  • sns.pairplot(): 能夠快速生成數據集中數值型特征兩兩之間的散點圖,以及每個特征自身的分布圖(對角線上),是探索性數據分析的利器。
  • 在 Seaborn 函數中,data 參數直接傳入 DataFrame,然后通過字符串列名指定 x, y, hue 等。

五、常見問題與選擇建議

5.1 Matplotlib vs Seaborn:何時選擇哪個?

  • Matplotlib:

    • 優點: 極致的靈活性和控制力,幾乎可以繪制任何類型的圖表,是底層繪圖庫。
    • 缺點: 對于復雜或統計相關的圖形,代碼量可能較大,默認樣式相對樸素。
    • 適用場景: 需要高度定制化圖形、繪制非標準圖表、進行精細的圖形元素控制、集成到大型應用中作為繪圖引擎。
  • Seaborn:

    • 優點: 接口更高級,代碼簡潔,內置美觀的主題和調色板,專注于統計可視化,能很好地與 Pandas DataFrame 集成。
    • 缺點: 靈活性不如 Matplotlib,主要針對特定類型的統計圖表。
    • 適用場景: 快速探索性數據分析、繪制美觀的統計圖表(如分布圖、關系圖、分類圖、熱力圖等)、希望用更少的代碼獲得更好的視覺效果。

實踐建議:

  • 對于簡單的、快速的繪圖或需要精細控制的場景,直接使用 Matplotlib。
  • 對于統計分析和希望快速生成美觀圖形的場景,優先考慮 Seaborn。
  • 通常兩者結合使用:使用 Seaborn 進行主體繪圖,然后使用 Matplotlib 的命令進行細節調整(如修改標題、標簽、添加注解等)。

5.2 圖像不顯示或中文亂碼問題

(1)圖像不顯示
  • Jupyter Notebook/Lab: 通常會自動顯示。如果不行,可以嘗試在繪圖代碼的最后加上 plt.show()。或者在 Notebook 開頭執行 %matplotlib inline (用于靜態圖) 或 %matplotlib notebook (用于交互式圖)。
  • Python 腳本: 必須在繪圖代碼的最后調用 plt.show() 才能顯示圖形。
(2)中文亂碼問題

Matplotlib 默認的字體可能不支持中文。解決方法通常有兩種:

  • 臨時指定字體:

    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12) # 指定一個支持中文的字體文件路徑# 在繪圖時指定
    plt.title("中文標題", fontproperties=font)
    plt.xlabel("X軸-中文", fontproperties=font)
    
  • 全局修改配置 (推薦):

    import matplotlib.pyplot as plt
    import seaborn as sns# 一次性設置,后續繪圖均生效
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默認字體為黑體
    plt.rcParams['axes.unicode_minus'] = False   # 解決保存圖像是負號'-'顯示為方塊的問題# seaborn 的風格設置也應該在這之后,或者單獨為 seaborn 的文本元素指定字體
    # sns.set(font='SimHei') # 可以嘗試,但有時可能不完全覆蓋所有 seaborn 元素# ... 正常的繪圖代碼 ...
    plt.title("你好,世界!")
    plt.xlabel("X軸")
    plt.plot([1,2,3], [4,5,1])
    plt.show()
    

    你需要確保你的系統中安裝了 SimHei (黑體) 或其他支持中文的字體。常見的可選字體有 SimHei (黑體), KaiTi (楷體), FangSong (仿宋), Microsoft YaHei (微軟雅黑) 等。

六、總結

本篇文章詳細介紹了 Python 中兩個核心的數據可視化庫 Matplotlib 和 Seaborn,它們是進行數據分析和展示研究成果不可或缺的工具。

核心內容回顧:

  1. 數據可視化的重要性: 可視化幫助我們直觀理解數據、發現模式與趨勢,并清晰地傳達分析結果。
  2. Matplotlib:
    • 是 Python 可視化的基石,提供底層的繪圖接口和高度的靈活性。
    • 核心概念包括 Figure (畫布) 和 Axes (子圖/繪圖區域)。
    • 學習了如何繪制基本的折線圖、散點圖、柱狀圖,并對圖形進行定制(標題、標簽、顏色、線型、圖例等)。
  3. Seaborn:
    • 構建于 Matplotlib 之上,提供更高級的接口,專注于創建美觀且信息豐富的統計圖形。
    • 能夠輕松設置繪圖風格和調色板。
    • 介紹了常用的繪圖函數,如關系圖 (lineplot, scatterplot)、分類圖 (boxplot, barplot)、分布圖 (histplot, kdeplot, pairplot) 和熱力圖 (heatmap)。
  4. 實戰應用:
    • 演示了如何結合 NumPy 使用 Matplotlib 進行數組數據的可視化。
    • 展示了如何利用 Seaborn 的便利性直接對 Pandas DataFrame 進行復雜的可視化分析。
  5. 選擇與常見問題:
    • 討論了 Matplotlib 和 Seaborn 的適用場景和選擇建議。
    • 提供了解決圖像不顯示和中文亂碼問題的方案。

掌握 Matplotlib 和 Seaborn,將為您的數據探索之旅增添一雙銳利的眼睛。通過不斷實踐,您將能夠根據不同的數據和分析需求,靈活運用這兩個庫,創造出既美觀又富有洞察力的可視化作品。在后續的深度學習模型訓練和評估中,這些可視化技巧也將大放異彩。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80324.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flink 實時數據一致性與 Exactly-Once 語義保障實戰

在構建企業級實時數倉的過程中,“數據一致性” 是保障指標準確性的核心能力,尤其是在金融、電商、醫療等對數據敏感度極高的場景中。Flink 作為流批一體的實時計算引擎,其內建的 Exactly-Once 語義為我們提供了強有力的保障機制。本篇將圍繞如何實現端到端的數據一致性、如何…

傅利葉十周年,升級核心戰略:“有溫度”的具身智能藍圖

5月9日,傅利葉十周年慶典暨首屆具身智能生態峰會在上海正式召開。本次大會以“十年共創,具身成翼”為主題,匯聚了來自通用機器人與醫療康復領域的頂尖專家學者、合作伙伴與投資機構,共同探索具身智能在未來十年的技術應用與生態發…

Docker中mysql鏡像保存與導入

一、Docker中mysql鏡像保存 Docker 的 MySQL 鏡像保存通常有兩種場景:一種是保存鏡像本身的修改(如配置、初始化數據),另一種是持久化保存容器運行時產生的數據(如數據庫表、用戶數據)。以下是具體方法&am…

大模型微調指南之 LLaMA-Factory 篇:一鍵啟動LLaMA系列模型高效微調

文章目錄 一、簡介二、如何安裝2.1 安裝2.2 校驗 三、開始使用3.1 可視化界面3.2 使用命令行3.2.1 模型微調訓練3.2.2 模型合并3.2.3 模型推理3.2.4 模型評估 四、高級功能4.1 分布訓練4.2 DeepSpeed4.2.1 單機多卡4.2.2 多機多卡 五、日志分析 一、簡介 LLaMA-Factory 是一個…

記錄一次window2012r2安裝配置oracle11g的過程-出現的錯誤以及解決方法

Windows server 2012R2安裝Oracle11g 出現的錯誤 同事反饋正常安裝oracle后, 使用命令行 sqlplus sys / as sysdba出現“ORA-12560:TNS:協議適配器錯誤”。 去services.msc服務狀態里面 OracleOraDb11g_home1TNSListener服務停止狀態,而且無法啟動。 …

2003-2020年高鐵線路信息數據

2003-2020年高鐵線路信息數據 1、時間:2003-2020年 2、來源:Chinese High-speed Rail and Airline Database,CRAD 3、指標:高鐵線路名稱、起點名、終點名、開通時間、線路長度(km)、設計速度(km/h)、沿途主要車站 …

【論文閱讀】FreePCA

FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis 原文摘要 問題背景 核心挑戰: 長視頻生成通常依賴在短視頻上訓練的模型,但由于視頻幀數增加會導致數…

Linux:線程同步與互斥

目錄 線程互斥 鎖 初始化 銷毀 加鎖 解鎖 線程同步 條件變量 初始化 銷毀 等待條件滿足 喚醒等待 pthread_cond_signal pthread_cond_broadcast 生產者消費者模型 3種關系 2種角色 1個交易場所 POSIX信號量 初始化 銷毀 等待 發布 線程互斥 互斥相關…

LeetCode --- 448 周賽

題目列表 3536. 兩個數字的最大乘積 3537. 填充特殊網格 3538. 合并得到最小旅行時間 3539. 魔法序列的數組乘積之和 一、兩個數字的最大乘積 由于數據都是正數,所以乘積最大的兩個數,本質就是找數組中最大的兩個數即可,可以排序后直接找到…

Azure Document Intelligence

Azure Document Intelligence(以前稱為 Form Recognizer)是一項云服務,可用于從文檔中提取文本、鍵值對、表等信息。下面是一個使用 Python SDK 進行文檔轉換和提取信息的基本示例。 1. 安裝依賴 首先,你需要安裝 azure-ai-formrecognizer 庫&#xff0c…

51單片機快速成長路徑

作為在嵌入式領域深耕18年的工程師,分享一條經過工業驗證的51單片機快速成長路徑,全程干貨無注水: 一、突破認知誤區(新手必看) 不要糾結于「匯編還是C」:現代開發90%場景用C,掌握指針和內存管…

SQLite數據庫加密(Java語言、python語言)

1. 背景與需求 SQLite 是一種輕量級的關系型數據庫,廣泛應用于嵌入式設備、移動應用、桌面應用等場景。為了保護數據的隱私與安全,SQLite 提供了加密功能(通過 SQLCipher 擴展)。在 Java 中,可以使用 sqlite-jdbc 驅動與 SQLCipher 集成來實現 SQLite 數據庫的加密。 本…

《AI大模型應知應會100篇》第53篇:Hugging Face生態系統入門

第53篇:Hugging Face生態系統入門 ——從模型獲取到部署的全流程實戰指南 📌 摘要 在人工智能快速發展的今天,Hugging Face已成為自然語言處理(NLP)領域最具影響力的開源平臺之一。它不僅提供豐富的預訓練模型、強大…

什么是向量數據庫?向量數據庫和關系數據庫有什么區別?

什么是向量數據庫? 向量數據庫是一種專門設計用來存儲、索引和查詢向量數據的數據庫系統。在當今的人工智能和機器學習領域中,向量數據庫變得越來越重要,尤其是在處理高維數據如圖像、音頻和文本等非結構化數據時。 主要用途 相似度搜索&…

關于甲骨文(oracle cloud)丟失MFA的解決方案

前兩年,申請了一個招商的多幣種信用卡,然后就從網上擼了一個oracle的免費1h1g的服務器。 用了一段時間,人家要啟用MFA驗證。 啥叫MFA驗證,類似與短信驗證吧,就是綁定一個手機,然后下載一個app,每…

基于Arduino Nano的DIY示波器

基于Arduino Nano的DIY示波器:打造屬于你的口袋實驗室 前言 在電子愛好者的世界里,示波器是不可或缺的工具之一。它能夠幫助我們觀察和分析各種電子信號的波形,從而更好地理解和調試電路。然而,市面上的示波器價格往往較高&…

LeetCode 解題思路 47(最長回文子串、最長公共子序列)

解題思路: dp 數組的含義: dp[i][j] 是否為回文子串。遞推公式: dp[i][j] s.charAt(i) s.charAt(j) && dp[i 1][j - 1]。dp 數組初始化: 單字符 dp[i][i] true,雙字符 dp[i][i 1] s.charAt(i) s.charA…

通過管道實現C++ Linux獨立進程之間的通信和字符串傳遞

在Linux環境下,獨立進程之間的通信(IPC)可以通過多種方式實現,包括管道、消息隊列、共享內存和套接字。本文將詳細介紹如何使用管道(pipe)在C中實現獨立進程之間的通信,并傳遞字符串。 一、管道…

神經網絡極簡入門技術分享

1. 引言 神經網絡是深度學習的基礎,其設計靈感來源于人腦神經元的結構和工作方式。盡管現代神經網絡已經變得異常復雜,但其核心原理卻相對簡單易懂。本報告旨在通過剖析神經網絡的最基本單元——神經元,幫助初學者理解神經網絡的工作原理。 …

五、Hadoop集群部署:從零搭建三節點Hadoop環境(保姆級教程)

作者:IvanCodes 日期:2025年5月7日 專欄:Hadoop教程 前言: 想玩轉大數據,Hadoop集群是繞不開的一道坎。很多小伙伴一看到集群部署就頭大,各種配置、各種坑。別慌!這篇教程就是你的“救生圈”。 …