试图在R中使用ggplot创建分组框图时,我有些困惑。我有一个数据框,需要转换它才能获得所需的数据结构。
我的数据如下:
我有两个数据框:
# data frame 1: Method 1
F1 <- c(10,2,3,5,6)
F2 <- c(33, 45, 6, 8, 9)
F3 <- c(44, 55, 10, 23, 44)
Method <- rep("Method1", 5)
data1 = data.frame( F1, F2, F3, Method)
# data frame 2: Method 2
F1 <- c(11,5,3,8,6)
F2 <- c(31, 35, 6, 8, 11)
F3 <- c(44, 55, 12, 23, 41)
Method <- rep("Method2", 5)
data2 = data.frame( F1, F2, F3, Method)
我想创建一个分组的箱形图,比较两种方法的F1,F2和F3,为此,我对它们的数据帧进行了转换,以便在函数ggplot中输入正确的值。我认为正确的结构如下:
我为此编写了以下功能:
transform_data <- function(df){
dlist = list()
for( f in names(df)){
# The for loop means to create a df for each feature with the desired structure
Values = df$f
Method = df$method
data = data.frame(column_value , pipeline)
data$feature = f
data append to dlist # Can't find the way to do this
}
final_df = do.call(rbind, dlist) # The created data frames are finally bound
return(final_df)
}
将功能应用于两个数据帧后,我将同时绑定两个函数以获得最终数据帧“数据”。
所需的情节最终将是:
ggplot(data, aes(x=Feature, y=Values, fill=Method)) +
geom_boxplot()
我的数据框显然要复杂得多。 :(
任何评论都将受到欢迎。 非常感谢,
瑞秋
答案 0 :(得分:1)
也许您正在寻找这个。您可以使用bind_rows()
和pivot_longer()
保持方法变量。之后,您可以针对每种方法使用构面来设计图。这里的代码:
library(dplyr)
library(tidyr)
library(ggplot2)
#Code
data1 %>% bind_rows(data2) %>%
pivot_longer(-Method) %>%
ggplot(aes(x=name,y=value,fill=name))+
geom_boxplot()+
facet_wrap(.~Method,nrow = 1,strip.position = 'bottom')+
theme_bw()+
theme(strip.placement = 'outside',
strip.background = element_blank())
输出: