我正在尝试在ggplot2中叠加条形图和点/线图。下面我提供一些示例数据。首先,我需要查看长度计数,这是一个连续变量,所以我不得不将长度合并以产生一个有意义的频率分布(下面的lngth.freq)。我还需要从模型结果中估计不同长度的寿命或存活率,因此我可以看到长度超过长度的寿命。为此,我在bin中点长度建模了长寿(all.lngth below)。现在我想覆盖两个图形,以便点估计与区间对齐。我分别生成了图形(因为这似乎更合适,然后根据我读过的其他帖子尝试一步完成)。最终我应该使用bin类别作为两者的x轴标签,但由于比例差异,我似乎无法使两个图形正确排列。 lngth是数字,但是bin是因素。我在各种关键词下搜索,但不能提出任何类似的东西。
首先我生成了图形(这是数据的一个子集,实际上比这复杂得多):
grp <- as.factor(c("SM","SS","SM","SS","SM","SS","SM","SS","SM","SS","SM","SS","SS","SS","SS"))
lngth <- as.numeric(c(12.5, 12.5, 37.5, 37.5, 62.5, 62.5, 87.5, 87.5, 112.5, 112.5, 137.5, 137.5, 162.5, 187.5, 212.5))
SR <- as.numeric(c(0.99, 0.95, 0.99, 0.97, 0.98, 0.98, 0.97, 0.97, 0.93, 0.95, 0.91, 0.94, 0.93, 0.93, 0.92))
datFreq <- data.frame(grp, lngth, SR)
require(ggplot2)
pd <- position_dodge(5)
all.lngth <- ggplot(data=datFreq, aes(x=lngth, y=SR, color=grp, ymin=0.9, ymax=1.0)) +
geom_point(group=grp, size=3, position=pd) +
geom_line(aes(group=grp), size=1, position=pd) +
labs(title="Mean SR by Length") +
theme(axis.title.x = element_blank())
all.lngth
#
grp2 <- as.factor(rep(c("SM","SS"), 9))
lngthbins <- rep(c("<=25","26-50","51-75","76-100","101-125","126-150","151-175","176-200",">201"), each=2)
lngthbins <- factor(lngthbins, levels=c("<=25","26-50","51-75","76-100","101-125","126-150","151-175","176-200",">201"), ordered=TRUE)
count <- as.integer(c(4,1,7,0,12,4,5,9,1,15,2,10,0,3,0,2,0,1))
datLngth <- data.frame(grp2, lngthbins, count)
attach(datLngth)
lngth.freq <- ggplot(data=datLngth, aes(x=lngthbins, y=count, fill = grp2)) +
geom_bar(position=position_dodge(), stat="identity") +
xlab("Length bins") + ylab("Count")
lngth.freq
我原本想要一张图片,其频率分布如下,第二张y轴代表上面的生存图。在Stackoverflow上的一些阅读建议使用grid.arrange()而不是堆叠它们,这也可以工作,我想如果我能让它们对齐。
grid.arrange(all.lngth, lngth.freq)
很抱歉帖子的长度以及任何重复的问题。