R:Boxplot如何有效地表达数据

R:Boxplot如何有效地表达数据,r,plot,ggplot2,boxplot,melt,R,Plot,Ggplot2,Boxplot,Melt,我使用的数据是 > head(df2) Results Capacity Power LDI LDE LB PDC D E1 E2 E3 E4 E5 E6 E7 E8 E9 1 DCNoV2GYesDC C1 PG11 LDI0 LDE0 LB0.045 PDC0 D10 30 NA 20 3 1 5 NA NA NA 20 2 DCNoV2GYesDC C0.95 PG11 LDI0 LDE2 LB0.045 PDC0 D10 8

我使用的数据是

> head(df2)
       Results Capacity Power  LDI  LDE      LB  PDC   D E1 E2 E3 E4 E5 E6 E7 E8 E9
1 DCNoV2GYesDC       C1  PG11 LDI0 LDE0 LB0.045 PDC0 D10 30 NA 20 3 1 5 NA NA NA 20
2 DCNoV2GYesDC    C0.95  PG11 LDI0 LDE2 LB0.045 PDC0 D10 8  3  NA  8  9 NA NA NA NA
3 DCNoV2GYesDC     C0.9  PG11 LDI0 LDE2 LB0.045 PDC0 D10 8  NA  5  NA  6 7 NA NA NA
4 DCNoV2GYesDC    C0.85  PG11 LDI0 LDE2 LB0.045 PDC0 D10 NA NA NA NA NA NA NA NA NA
5 DCNoV2GYesDC     C0.8  PG11 LDI0 LDE3 LB0.045 PDC0 D10 NA NA NA NA NA NA NA NA NA
6 DCNoV2GYesDC    C0.75  PG11 LDI0 LDE3 LB0.045 PDC0 D10 NA NA  1  1 NA  1 NA 50 70
我编写了一个循环,在一个脚本中绘制多个bowplot:

df2 <- myfun2(Impact$X__3, EV)
Box.graph <- function(df2, na.rm = TRUE, ...){
  Caplist <- unique(df2$Capacity) 
y <- df2[df2$Capacity==Caplist[i],1:9]
  for (i in seq_along(Caplist)){
    boxplot <- 
      ggplot(subset(df2, df2$Capacity==Caplist[i]),
             aes(LDI, y=value , colour = LDI), group = df2$Capacity) +
      geom_boxplot() +
      theme(axis.text.x = element_text(size=14))+
      facet_wrap( ~ PDC, ncol =1)+ 
      theme(legend.position = "top")+
      scale_y_continuous("time")+
      scale_x_continuous("LDI")+
      ggtitle(paste(Caplist[i], ' LDE \n', 
                    "time \n",
                    sep=''))
    #save plot as PNG 
    ggsave(plot = last_plot(), file= paste(StoreResults, '/Results/',
                                           Caplist[i], "YesDCNoV2G.png", sep=''), scale=2)
    print(boxplot)
  }
}
#Run the function  
Box.graph(df2)

df2请尝试此简化功能(没有真实数据很难测试):


Box.graph在
df2
中没有
值,您正在绘制吗?@PoGibas我是R新手,循环方法看起来像是一种很好的方法,可以分别存储不同的实验。你会如何用不同的方面重新表述我的问题?那么优势是什么呢?(我很好奇)@PiGibas我试图在一个方框图中为每一行绘制列E1、E2、E3、E4、E5、E6、E7、E8和E9的值。因此,也就是说,对于容量C1,我想创建一个值的箱线图(30 NA 20 3 1 5 NA NA 20),在运行文件后,我收到以下错误:警告消息:在melt.data.table(df2,c(“LDI”,“PDC”,“Capacity”):“measure.vars”[Results,Power,LDE,LB,…]中不是所有类型。按照层次结构的顺序,熔融数据值列将为“字符”类型。所有非“character”类型的度量变量都将强制为。查看?melt.data.table中的详细信息以了解有关强制的更多信息。@Ima这是一条警告消息,一切正常:-)@Ima但文件保存了吗?@PiBas确实保存了!很抱歉。但正如我之前提到的,我有一个大的数据集,问题是它保存的箱线图不是我想要的。。。。有没有办法在我定义的子集中融化数据<代码>子集(df2,df2$Capacity==Caplist[i]
,因为绘图顺序不正确。@通过编辑代码,我终于得到了想要的结果:
Box.graph <- function(df2, naRM = TRUE) {
    library(data.table)
    library(ggplot2)

    setDT(df2)
    foo <- melt(df2, c("LDI", "PDC", "Capacity"))[variable %in% paste0("E", 1:9)]
    if (naRM) {
        foo <- foo[!is.na(value)]
    }
    p <- ggplot(foo, aes(LDI, value, fill = LDI)) +
        geom_boxplot() +
        facet_wrap(Capacity ~ PDC)
    ggsave(plot = p, file = paste0(StoreResults, "/Results/YesDCNoV2G.png"), scale=2)
    return(NULL)
}
Box.graph(df2)