我有一个具有这种结构的数据集:
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轴是不连续的(见下图):
我还想添加回归线(平滑),因此我必须使用连续变量(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的解决方案是什么? 感谢
答案 0 :(得分: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)
返回因子代码。如果您的垃圾箱尺寸不同(在您的情况下不是这样),情节可能会产生误导。