R 为ggplot中的不同列值并排放置多个箱线图

R 为ggplot中的不同列值并排放置多个箱线图,r,ggplot2,boxplot,facet,R,Ggplot2,Boxplot,Facet,我读过不同的帖子,比如和,但我的问题有一点不同。我有一个像这样的df ID <- c("DJ45","DJ46","DJ47","DJ48","DJ49","DJ53","DJ54","DJ55","DJ56","DJ57") Tool <- c("Tool_A", "Tool_A", "Tool_A", "Tool_A", "Tool_A", "Tool_B", "Tool_B", "Tool_B", "Tool_B", "Tool_B") Name <- c("CMP",

我读过不同的帖子,比如和,但我的问题有一点不同。我有一个像这样的df

ID <- c("DJ45","DJ46","DJ47","DJ48","DJ49","DJ53","DJ54","DJ55","DJ56","DJ57")
Tool <- c("Tool_A", "Tool_A", "Tool_A", "Tool_A", "Tool_A", "Tool_B", "Tool_B", "Tool_B", "Tool_B", "Tool_B")
Name <- c("CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP")
MS1 <- c(51,55,50,59,50,47,48,42,43,46)
MS2 <- c(13,11,14,11,10,17,18,17,20,21)
MS3 <- c(2,3,2,5,6,4,9,6,4,4)
MS4 <- c(16,13,14,11,16,16,18,16,19,15)
MS5 <- c(3,6,3,6,3,4,4,8,5,4)
MS6 <- c(7,7,5,5,8,9,8,6,6,9)

df1 <- data.frame(ID,Tool,Name,MS1,MS2,MS3,MS4,MS5,MS6)
我使用ggplot进行箱线图可视化,但在这里,我只对其中一个步骤进行箱线图可视化

p <- ggplot(df1, aes(factor(Tool), MS6))
p + geom_boxplot(aes(fill = Tool)) + labs(title = "CMP")

p你的问题是你需要一个长的格式来完成facet\u包装

#first, reshape to long
library(reshape2)

df1_long <- melt(df1, id.vars=c("ID","Tool","Name"))

#then plot
p2 <- ggplot(df1_long, aes(x=factor(Tool),y=value,fill=factor(Tool)))+
  geom_boxplot() + labs(title="CMP") +facet_wrap(~variable)
p2
#首先,重塑为长形
图书馆(E2)

df1_long您也可以在不使用面_包装的情况下这样做:

library(reshape2)

df2<-melt(df1,id.var=c("ID","Tool","Name"))

p <- ggplot(df2, aes(variable, value,fill=Tool))
p + geom_boxplot() + labs(title = "CMP")
library(重塑2)

df2您还可以使用Tidyr包中的聚集功能来塑造数据:

library(tidyr)

df1 %>% 
  gather(MS, value, MS1, MS2, MS3, MS4, MS5, MS6) %>% 
  ggplot(aes(x = factor(Tool), y = value, fill = factor(Tool)))+
  geom_boxplot()+
  facet_wrap(~MS)

我需要的是一个图书馆。非常感谢你指出这一点。像charm一样工作。是否可以动态添加变量(
ID
,“
Tool
Name
)?因为如果你有很多可变的伟大的解决方案,这是不方便的,但我不得不使用facet_wrap,因为我最初的大数据集有6个以上的测量步骤。非常感谢您发布此邮件。:-)
library(tidyr)

df1 %>% 
  gather(MS, value, MS1, MS2, MS3, MS4, MS5, MS6) %>% 
  ggplot(aes(x = factor(Tool), y = value, fill = factor(Tool)))+
  geom_boxplot()+
  facet_wrap(~MS)