两组的箱形图为每组添加回归线

时间:2017-08-05 14:17:31

标签: r plot

我想制作一个图形,用于绘制两组的箱形图,并为每个组添加回归线。我见过几个例子,但没有达到我的目标。

我的数据框是这样的:

df<- data.frame(cont.burnint= c(rep(2,10), rep(12, 10), rep(25, 10)), 
                  variable= rep(c("divA","divC"), 30), 
                  value= sample(x = seq(-1,4,0.5), size = 60, replace = 
                   TRUE))

我想制作一个图像:enter image description here

但是,我想将每个组的点更改为方框图。我在下面没有找到有用的例子:

Add geom_smooth to boxplot Adding a simple lm trend line to a ggplot boxplot

到目前为止我找到的代码将连续变量cont.burnint更改为一个因子,并将x值从c(2,12,25)重新排序到c(12,2,25)。此外,ggplot示例中的回归线(请参阅链接)不会延伸到y轴。我希望回归线延伸到y轴。第三,箱形图彼此偏离设置,我想要一个选项,使两个组的箱形图保持相同的x值。

所以基本上,在上面的例子中,我想改变提供给框和胡须图的图中的点,并保持其他所有相同。我不介意在情节下​​方添加一个图例,并使文字和线条也更大胆。

以下是上述示例的代码:

 plot(as.numeric(as.character(manovadata$cont.burnint)),manovadata$divA,type="p",col="black", xlab="Burn Interval (yr)", ylab="Interaction Diveristy", bty="n", cex.lab=1.5)

points(as.numeric(as.character(manovadata$cont.burnint)),manovadata$divC,col="grey")

abline(lm(manovadata$divA~as.numeric(as.character(manovadata$cont.burnint)), manovadata),col="black",lty=1)

abline(lm(manovadata$divC~as.numeric(as.character(manovadata$cont.burnint)), manovadata),col="grey",lty=1)

1 个答案:

答案 0 :(得分:0)

我无法想象你为什么要覆盖箱形图,但是我想你在这里:

library(ggplot2)

df$cont.burnint <- as.factor(df$cont.burnint)

ggplot(df, aes(x=cont.burnint, y=value, col=variable))+
  geom_boxplot(position=position_dodge(width=0), alpha=0.5)+
  geom_smooth(aes(group=variable), method="lm")

我使用alpha为箱图添加了一些透明度,使它们在彼此之上可见。

更新

ggplot(df, aes(x=cont.burnint, y=value, col=variable))+
  geom_boxplot(aes(group=paste(variable,cont.burnint)))+
  geom_smooth(aes(group=variable), method="lm", fullrange=T, se=F)+xlim(0,30)