2014-01-23 40 views
0

我有這種結構的數據集:ggplot - 上的箱線圖添加回歸線與離散化(不連續的)的x軸

df<- data.frame (VPD.mean=rnorm(100,mean=2,sd=0.8), treatment=c("ambient","elevated"), variable=rnorm(100,mean=50,sd=10)) 
df$group <- with(df, as.factor (ifelse (VPD.mean>0 & VPD.mean<=1,"0-1",ifelse (
    VPD.mean>1 & VPD.mean<=1.5,"1-1.5",ifelse (
    VPD.mean >1.5 & VPD.mean<2, "1.5-2",ifelse (
     VPD.mean >=2 & VPD.mean<2.5, "2-2.5",ifelse (
     VPD.mean >=2.5 & VPD.mean <3,"2.5-3", ifelse(
      VPD.mean >=3,">3", NA) 
    ))))))) 
df$group<- factor(df$group,levels=c("0-1","1-1.5","1.5-2" ,"2-2.5","2.5-3",">3")) 

我創建使用創建的組的箱線圖裝箱VPD.mean後,因此X軸是不連續的(見下圖): enter image description here

我還想添加一個迴歸線(平滑),因此我將不得不使用連續變量(VPD.mean)而不是裝箱的(組)作爲x軸。結果不好,因爲平滑線與圖的x軸不匹配。這是ggplot代碼:

ggplot(df[!is.na(df$group),], aes(group,variable,fill=treatment)) + 
    geom_boxplot(outlier.size = 0) + geom_smooth(aes(x=VPD.mean)) 

什麼是繪製從不同的x軸geom_smooth在同一張圖解決? 謝謝

+2

在我看來,將這兩種不同的情節繪製成一個情節是不明智的(如果可能的話)。你的情節看起來很亂。因此,最好製作兩個獨立的地塊。 – Jaap

回答

0

它可以做你所問,但它是一個非常糟糕的主意。

set.seed(1) # for reproducible example 
df<- data.frame (VPD.mean=rnorm(100,mean=2,sd=0.8), treatment=c("ambient","elevated"), variable=rnorm(100,mean=50,sd=10)) 
df$group <- cut(df$VPD.mean, 
       breaks=c(0,seq(1,3,by=0.5),Inf), 
       labels=c("0-1","1-1.5","1.5-2","2-2.5","2.5-3",">3")) 
library(ggplot2) 
ggplot(df[!is.na(df$group),]) + 
    geom_boxplot(aes(x=factor(group),y=variable,fill=treatment), 
       position=position_dodge(.7),width=.8)+ 
    geom_smooth(aes(x=as.integer(group),y=variable,color=treatment,fill=treatment),method=loess) 

這工作,更多或更少的,因爲ggplot使用爲x軸的因子代碼,並且因子水平軸標籤。 as.integer(group)返回因子代碼。如果你的箱子尺寸不一樣(而且你的箱子不是),那麼情節可能會產生誤導。