我有一個這樣的資料框:
df <- data.frame(var_1 = c(1,2,3,4,5,6,7,8,9),
var_2 = c(21,23,34,45,23,56,76,54,65),
var_3 = c(6,5,4,3,5,7,3,2,5),
label = c(1,1,1,2,1,2,2,1,2))
我想創建并排(或平鋪)箱形圖,以便第一個箱形圖是
boxplot(var_1~label, df)
第二個箱線圖是
boxplot(var_2~label, df)
等等。有沒有辦法做到這一點,而我不必每次都輸入箱線圖命令?例如,某些命令迭代地匹配所有列label
并為每個列繪制一個箱形圖?
uj5u.com熱心網友回復:
使用ggplot::facet_wrap()
它可以很容易地從一個資料集中制作一堆圖表面板。但是,要使其正常作業,定義不同面板的變數必須位于單個列中。在這種情況下,這意味著您必須從“寬”格式轉換為“長”格式的資料。為此我建議tidyr::pivot_longer()
。最后一點是您需要將您label
視為 afactor
否則您將不會像在基礎 R 中那樣獲得單獨的框,因為我認為默認情況下會將 x 變數轉換為 {ggplot2} 不會執行的因子(盡管它會給出資訊警告)。最后,如果您想y
為每個繪圖設定單獨的軸,您可以scales = "free_y"
在facet_wrap()
.
library(tidyverse)
df <- data.frame(var_1 = c(1,2,3,4,5,6,7,8,9),
var_2 = c(21,23,34,45,23,56,76,54,65),
var_3 = c(6,5,4,3,5,7,3,2,5),
label = c(1,1,1,2,1,2,2,1,2))
df %>%
pivot_longer(-label) %>%
ggplot(aes(factor(label), value))
geom_boxplot()
facet_wrap(vars(name), nrow = 1)
由reprex 包創建于 2022-02-12 (v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427675.html