簡體   English   中英

如何在 R 中創建分組箱線圖?

[英]How to create a grouped boxplot in R?

我想合並分組的三個數據集並獲得一個只有兩個框的圖形,1 個用於 A,1 個用於 B。你能建議如何得到它嗎?

我正在嘗試在 R 中創建一個分組箱線圖。我有 2 個組:A 和 B,在每個組中我有 3 個子組,每個子組有 5 個測量值。

以下是我構建箱線圖的方式,但如果有人有更好、更短或更簡單的方法,我將不勝感激

A1 <- c(1,2,9,6,4)
A2 <- c(5,1,9,2,3)
A3 <- c(1,2,3,4,5)
B1 <- c(2,4,6,8,10)
B2 <- c(0,3,6,9,12)
B3 <- c(1,1,2,8,7)

DF <- data.frame(A1, A2, A3, B1, B2, B3)

boxplot(DF, col = rainbow(3, s = 0.5))
axis(side = 1, at = c(2,5), labels = c("A","B"))
legend("topleft", fill = rainbow(3, s = 0.5), legend = c(1,2,3), horiz = T)

在此處輸入圖像描述

如何正確分組(連接)A 和 B 中的框,並在嘗試時將軸標題固定為簡單的 A 和 B?

我想要類似的東西

在此處輸入圖像描述

當數據為long格式 Vice wide時,像這樣對它們進行分組會更容易。 從你的載體開始:

DF2 <- data.frame(
  x = c(c(A1, A2, A3), c(B1, B2, B3)),
  y = rep(c("A", "B"), each = 15),
  z = rep(rep(1:3, each=5), 2),
  stringsAsFactors = FALSE
)
str(DF2)
# 'data.frame': 30 obs. of  3 variables:
#  $ x: num  1 2 9 6 4 5 1 9 2 3 ...
#  $ y: chr  "A" "A" "A" "A" ...
#  $ z: int  1 1 1 1 1 2 2 2 2 2 ...

cols <- rainbow(3, s = 0.5)
boxplot(x ~ z + y, data = DF2,
        at = c(1:3, 5:7), col = cols,
        names = c("", "A", "", "", "B", ""), xaxs = FALSE)
legend("topleft", fill = cols, legend = c(1,2,3), horiz = T)

使用at手動控制放置,因此“視覺分組”不是很健壯。 (您可以使用width和/或boxwex控制它們之間的間距。)

基礎 R 箱線圖

您也可以選擇ggplot2

library(ggplot2)
ggplot(DF2, aes(y, x, fill=factor(z))) +
  geom_boxplot()

ggplot箱線圖

你應該使用ggplot2

ggplot() + 
  geom_boxplot(data = df, mapping = aes(col_name, value, fill=index))  + 
  theme( axis.text.x = element_blank()) +
  geom_segment(data=hline1, mapping=aes(x=1, y=-0.5, xend=3, yend=-0.5), size=2) +
  annotate("text", x = 2, y = -1, label = "A") + 
  geom_segment(data=hline1, mapping=aes(x=4, y=-0.5, xend=6, yend=-0.5), size=2) +
  annotate("text", x = 5, y = -1, label = "B")

在此處輸入圖片說明

使用基礎 R,我認為 @r2evans 解決方案是最好的。 但是,對問題中的代碼更簡單的修復是使用選項xaxt="n"

boxplot(DF, col = rainbow(3, s = 0.5), at = c(1:3,5:7), xaxt = "n")
axis(side = 1, at = c(2,6), labels = c("A","B"))
legend("topleft", fill = rainbow(3, s = 0.5), legend = c(1,2,3), horiz = T)

這增加了格式化軸的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM