輕鬆在 ggplot2 圖上顯示迴歸方程式:ggpmisc 套件的 stat_poly_eq()

更新 發佈閱讀 13 分鐘

在資料分析與視覺化中,我們經常需要在散點圖上疊加迴歸線,並直接顯示其統計資訊,例如迴歸方程式和 R2 值。這不僅能讓圖表更具資訊量,也方便讀者快速理解變數間的關係。雖然 ggplot2 本身功能強大,但要自動在圖上顯示這些迴歸細節卻不是那麼直觀。

這時候,ggpmisc 套件就派上用場了!它為 ggplot2 擴展了許多實用的功能,其中最受歡迎的莫過於 stat_poly_eq() 函數,它能讓你輕鬆地將迴歸方程式、R2值、p 值等直接呈現在你的圖表上。

為什麼選擇 stat_poly_eq()

  • 自動化: 不再需要手動計算和輸入迴歸方程式或統計值。
  • 整合性: 作為 ggplot2 的圖層,完美融入你的視覺化流程。
  • 專業呈現: 支援 LaTeX 語法解析,讓數學方程式和統計符號顯示得既美觀又專業。
  • 客製化: 提供豐富的參數選項,讓你精確控制顯示的內容和位置。

stat_poly_eq() 的基本用法

要使用 stat_poly_eq(),你需要確保已經安裝並載入了 ggplot2 和 ggpmisc 這兩個套件。

# 如果尚未安裝,請先執行以下兩行
install.packages("ggplot2")
install.packages("ggpmisc")

# 載入所需的套件
library(ggplot2)
library(ggpmisc)

# 使用 R 內建的 mtcars 資料集作為範例
# 我們將繪製車重 (wt) 與每加侖行駛里程 (mpg) 的關係
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() + # 繪製散點圖
geom_smooth(method = "lm", se = FALSE, color = "blue") + # 添加線性迴歸線 (不顯示信賴區間)
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")), # 定義要顯示的標籤內容
parse = TRUE # 啟用數學表達式解析,讓方程式和符號正確顯示
) +
labs(
title = "車重對油耗的線性迴歸分析",
x = "車重 (千磅)",
y = "每加侖英里數 (MPG)"
) +
theme_classic() # 使用簡潔的主題
vocus|新世代的創作平台

程式碼解析

  1. ggplot(mtcars, aes(x = wt, y = mpg)): 初始化 ggplot 物件,設定資料集和 X、Y 軸的變數。
  2. geom_point(): 添加散點圖層,顯示原始資料點。
  3. geom_smooth(method = "lm", se = FALSE, color = "blue"): 添加平滑曲線圖層。method = "lm" 表示我們要擬合一個線性模型(Linear Model)。se = FALSE 則是不顯示迴歸線的信賴區間,color = "blue" 設定線條顏色。
  4. stat_poly_eq(): 這是 ggpmisc 的核心函數。aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")): 這個是魔法發生的地方!
      • stat() 是一個特殊的函數,用於從統計變數中獲取標籤。
      • eq.label 代表迴歸方程式的標籤(例如:y=ax+by=ax+b)。
      • rr.label 代表  值的標籤。
      • paste(..., sep = "*\", \"*") 是將多個標籤連接起來的函數。sep = "*\", \"*" 是一個小技巧,當 parse = TRUE 時,它會被解析為一個逗號和一個空格,讓多個標籤之間有適當的分隔。
      • parse = TRUE: 非常重要! 這個參數告訴 ggplot2 將 label 內容解析為數學表達式。這樣R 平方值的上標、等式中的符號等才能正確顯示,而不是純文字

客製化你的統計標籤

stat_poly_eq() 提供了豐富的參數,讓你精確控制顯示的內容和格式:

1. 選擇顯示的統計資訊

你可以在 aes(label = ...) 中使用 stat() 函數搭配不同的統計變數:

    • stat(eq.label): 迴歸方程式。
    • stat(rr.label): R2 值。
    • stat(adj.rr.label): 調整後的 R2 值。
    • stat(p.value.label): P 值。
    • stat(n.label): 觀察值數量。
    • stat(AIC.label)stat(BIC.label): 模型的 AIC 和 BIC 值。
    • stat(F.value.label)stat(df.label): F 統計量和自由度。
    • stat(s.label): 殘差標準誤。
    • stat(cor.coef.label): 相關係數 (R)。

範例:同時顯示方程式、R² 和 P 值

ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
stat_poly_eq(
aes(label = paste(stat(eq.label),
stat(rr.label),
stat(p.value.label),
sep = "*\", \"*")), # 用逗號分隔多個標籤
parse = TRUE
) +
labs(title = expression(paste("迴歸方程式 ", R^2 ," 和 p-value")) ) +
theme_classic()

vocus|新世代的創作平台

2.控制數字的小數位數

你可以使用 rr.digitsp.value.digitscoef.digits 等參數來設定顯示的小數位數。

ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "darkgreen") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
rr.digits = 4, # R^2 顯示 4 位小數
coef.digits = 3, # 係數顯示 3 位小數
parse = TRUE
) +
labs(title = "調整小數位數") +
theme_classic()
vocus|新世代的創作平台

3. 調整標籤的位置

標籤的預設位置通常在圖表的左上角。可以使用 label.x 和 label.y

    • label.x: 接受 "left""right" 或 數值(1,-1)
    • label.y: 接受 "top""bottom", 或 數值(1,-1)
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "purple") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
label.x = "right",
label.y = "top",
parse = TRUE
) +
labs(title = "手動調整標籤位置") +
theme_classic()
vocus|新世代的創作平台

4. 改變標籤的外觀

你可以像其他 geom_text 或 geom_label 一樣,設定標籤的顏色、大小、字體等。你也可以將 geom 參數從預設的 "text" 改為 "label",讓標籤帶有背景框。

ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "orange") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
label.x = "right",
label.y = "top",
geom = "label_npc", # 標籤帶有背景框
color = "darkblue", # 標籤文字顏色
size = 4, # 標籤文字大小
fill = "lightyellow", # 標籤背景顏色
parse = TRUE
) +
labs(title = "客製化標籤外觀") +
theme_classic()
vocus|新世代的創作平台

ggpmisc 套件的 stat_poly_eq() 函數是 ggplot2 用戶的必備工具。它大大簡化了在圖表上直接顯示線性迴歸模型統計資訊的過程,讓你的資料視覺化作品既專業又具資訊量。透過靈活運用其參數,可以輕鬆打造出符合各種需求的迴歸分析圖表。

5.與分面 (Faceting) 結合使用

stat_poly_eq() 的一個強大之處在於,當你使用 facet_wrap() 或 facet_grid() 對圖表進行分面時,它會為每個子圖獨立計算並顯示迴歸統計資訊,這對於比較不同組別的關係非常方便。

# 範例:按汽缸數 (cyl) 分組,繪製不同車型汽缸數的迴歸分析
ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "brown") +
stat_poly_eq(
aes(label = paste(stat(eq.label), stat(rr.label), sep = "*\", \"*")),
parse = TRUE
) +
facet_wrap(~ cyl, scales = "free_y") + # 按 cyl 分組,允許 Y 軸自由縮放
labs(title = "不同汽缸數的迴歸分析",
x = "車重 (千磅)",
y = "每加侖英里數 (MPG)") +
theme_classic()
vocus|新世代的創作平台

總結

ggpmisc 套件的 stat_poly_eq() 函數是 ggplot2 用戶的必備工具。它大大簡化了在圖表上直接顯示線性迴歸模型統計資訊的過程,讓你的資料視覺化作品既專業又具資訊量。透過靈活運用其參數,可以輕鬆打造出符合各種需求的迴歸分析圖表。









留言
avatar-img
慵懶貓系的小墨魚:數據外的日常觀察
3會員
50內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
你可能也想看
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
在進行多層次線性模型(MLM)當中,有時候我們不只會加入層次1的預測變項。我們也會想加入層次2預測變項。本文將介紹加入層次2預測變項的各種模型,並解釋其公式和R語言操作方法。因為內容比較多,所以篇幅比較長。 多層次線性模型(MLM),截距是表示所有學校的平均值。斜率是指模型中自變量的係數,表
Thumbnail
在進行多層次線性模型(MLM)當中,有時候我們不只會加入層次1的預測變項。我們也會想加入層次2預測變項。本文將介紹加入層次2預測變項的各種模型,並解釋其公式和R語言操作方法。因為內容比較多,所以篇幅比較長。 多層次線性模型(MLM),截距是表示所有學校的平均值。斜率是指模型中自變量的係數,表
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
在資料分析過程中,透過衡量變數之間的線性或非線性關係,能有效探索數據集,篩選出重要特徵,並進行預測建模。本文介紹瞭如何理解數據、使用相關矩陣找出變數關聯性,以及利用互資訊評估變數之間的依賴程度,幫助資料科學家在建模過程中選擇適當的變數,提升模型效果。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
有時候在其他檔案轉換成SPSS檔時,可能出現在一個變項內,以特定符號將不同數字分開的(如下圖,第三行4,7,8),這時無法用SPSS進行有效分析。本文將說明如何使用SPSS將特定符號分開的數字轉換成不同變項,光看文字可能太過抽象,請看圖文教學。
Thumbnail
有時候在其他檔案轉換成SPSS檔時,可能出現在一個變項內,以特定符號將不同數字分開的(如下圖,第三行4,7,8),這時無法用SPSS進行有效分析。本文將說明如何使用SPSS將特定符號分開的數字轉換成不同變項,光看文字可能太過抽象,請看圖文教學。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News