使用R中的ggplot向条形图添加参照线

这是一个最小的例子,展示了我试图制作的情节。

数据如下所示:

plot1 = data.frame(
    Factor1 = as.factor(rep('A', 4)),
    Factor2 = as.factor(rep(c('C', 'D'), 2)),
    Factor3 = as.factor(c( rep('E', 2), rep('F', 2))),
    Y = c(0.225490, 0.121958, 0.218182, 0.269789)
)

plot2 = data.frame(
    Factor1 = as.factor(rep('B', 4)),
    Factor2 = as.factor(rep(c('C', 'D'), 2)),
    Factor3 = as.factor(c( rep('E', 2), rep('F', 2))),
    Y = c(-0.058585, -0.031686, 0.013141, 0.016249)
)

而绘图的基本代码如下所示:

require(ggplot2)
require(grid)

p1 <- ggplot(data=plot1, aes(x=Factor2, y=Y, fill=factor(Factor3))) +
    ggtitle('Type: A') +
    coord_cartesian(ylim = c(-0.10, 0.30)) +
    geom_bar(position=position_dodge(.9), width=0.5, stat='identity') +
    scale_x_discrete(name='Regime',
        labels=c('C', 'D')) +
    scale_y_continuous('Activations') +
    scale_fill_brewer(palette='Dark2', name='Background:',
        breaks=c('E','F'),
        labels=c('E','F')) +
    theme(axis.text=element_text(size=11),
        axis.title.x=element_text(size=13, vjust=-0.75),
        axis.title.y=element_text(size=13, vjust=0.75),
        legend.text=element_blank(),
        legend.title=element_blank(),
        legend.position='none',
        plot.title=element_text(hjust=0.5))

p2 <- ggplot(data=plot2, aes(x=Factor2, y=Y, fill=factor(Factor3))) +
    ggtitle('Type: B') +
    coord_cartesian(ylim = c(-0.10, 0.30)) +
    geom_bar(position=position_dodge(.9), width=0.5, stat='identity') +
    scale_x_discrete(name='Regime',
        labels=c('C', 'D')) +
    scale_y_continuous('Activations') +
    scale_fill_brewer(palette='Dark2', name='Background:',
        breaks=c('E','F'),
        labels=c('E','F')) +
    theme(axis.text=element_text(size=11),
        axis.title.x=element_text(size=13, vjust=-0.75),
        axis.title.y=element_blank(),
        legend.text=element_text(size=11),
        legend.title=element_text(size=13),
        plot.title=element_text(hjust=0.5))

pushViewport(viewport(
    layout=grid.layout(1, 2, heights=unit(4, 'null'),
        widths=unit(c(1,1.17), 'null'))))
print(p1, vp=viewport(layout.pos.row=1, layout.pos.col=1))
print(p2, vp=viewport(layout.pos.row=1, layout.pos.col=2))

该图如下所示:

?

?

然而,我需要这样的东西:

?

?

粗黑线是参考值。它们是恒定的,图中表示的是“参考情况”。但是,在其他绘图中,我需要产生的条形图将发生变化,但参考值应该保持不变,以使比较简单明了。我知道我应该使用geom_segment(),但是我试图实现这一点的那些代码却没有达到预期的效果。

有什么帮助/建议吗?谢谢!

转载请注明出处:http://www.xingnongyuan.com/article/20230523/2581040.html