如何在 r 中的同一个箱线图中绘制数据框的多列(使用 ggplot2)?

How do you plot multiple columns of a data frame all within the same boxplot in r (using ggplot2)?

我有一个如下所示的数据框:

Train_Table_Time_Power <- data.frame(
Mean = runif(100),
STD = runif(100),
Kurt = runif(100),
Skew = runif(100),
  TI = sample(c("0.05", "0.10", "0.15", "0.20"), 10, replace = TRUE)
)

然后我使用以下代码为倾斜特征创建了一个框:

Skew_BoxPlot <- ggplot(Train_Table_Time_Power, aes(x = TI, y = Skew, color = TI)) + 
  geom_boxplot(notch = T, id=TRUE) +
  stat_summary(fun = mean, geom="point", shape=19, color="red", size=2) +
  geom_jitter(shape=16, position = position_jitter(0.2), size = 0.3) +
  labs(title = "Crest_Time", x = "TI", y = "Normalized Magnitude") +
  theme_minimal() + theme_Publication()

上面的箱形图显示了随着 TI 特征的变化,Skew 特征的不同分布。但是,我现在想创建一个新的箱线图,显示所有特征(均值、STD、库尔特和偏斜)的分布,仅针对一个 TI 值,比如 TI = 0.05,我希望绘制该图同一图表上的所有箱线图分布水平排列,彼此相邻。谁能指导我如何最好地完成这项工作?

您可以将数据转换为长 table 然后绘制。使用 tidyverse 这可以轻松完成

library(tidyverse)
Train_Table_Time_Power %>% filter(TI == 0.05) %>% 
pivot_longer( cols=1:4) %>% 
ggplot(aes(x=name, y=value)) + geom_boxplot()

您可以将 TI == 0.05 更改为您想要的任何值,或者您可以使用所有 TI 值并使用 facet_grid() 分割出各个地块

Train_Table_Time_Power  %>% pivot_longer( cols=1:4) %>%
 ggplot(aes(x=name, y=value)) + geom_boxplot() +facet_grid(~TI)