在图下添加垂直线,没有额外的y轴

时间:2018-11-20 08:40:02

标签: r ggplot2

我正在尝试生成一条垂直线从图下方的x轴向下的正态分布。

到目前为止,我已经能够绘制分布曲线并添加x轴上方的线(图1),并组合两条线在其下方的图(图2)。

图1的问题是它们覆盖了图形而不是出现在下面,并且在图2中没有对齐。有人可以帮我弄这个吗?我不介意只要看起来还可以,该解决方案的方法/技巧如何。

图1

Figure 1

图2

Figure 2

代码:

library(gridExtra)
library(ggplot2)

# plot 1
p1 <- ggplot(data.frame(x = c(-3, 3)), aes(x)) +
  stat_function(fun = dnorm, 
            fill = "mediumpurple",
            alpha = 0.4,
            xlim = c(-1.96,1.96),
            geom = "area") +
  stat_function(fun = dnorm) +
  xlab(expression(mu)) +
  ylab("") +
  theme_classic() +
  theme(axis.title.x = element_text(vjust=22, size = 25),
        axis.text.x =  element_text(size = 13),
        axis.text.y =  element_text(size = 13))

 plot(p1)

 # plot 2
 p2 <- ggplot() +
   geom_vline(xintercept =-1.96, linetype=2) +
   geom_vline(xintercept = 1.96, linetype=2) +
   geom_vline(xintercept = 0, size = 1.1) +
   xlim(-3, 3) +
   xlab("") +
   theme_classic() +
   theme(axis.line.x = element_blank(),
         axis.ticks.x = element_blank(),
         axis.text.x = element_blank())

 grid.arrange(p1, p2, nrow=2)

1 个答案:

答案 0 :(得分:1)

您可以使用此对齐两个图形(按照Left align two graph edges (ggplot)):

gA <- ggplotGrob(p1)
gB <- ggplotGrob(p2)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)  
grid.arrange(gA, gB, ncol=1)

然后,您只需要减小两个图之间的间隔即可。