将点图叠加在同一面板上的密度图上方,并使轴对齐

时间:2019-01-16 06:10:26

标签: r ggplot2

嗨,我想在密度图的上方叠加一个点图。我可以用ggplot2做到这一点,但是我只能用网格对齐来做到这一点。哪种工作,但我似乎无法强迫每个图上的零对齐,其次,如果我可以使密度图位于同一面板上,而不是仅将两个图堆叠在一起,则效果会更好。

例如,这是到目前为止我可以做的。此处特意将图例放在左侧,以显示零未对齐。还要注意,两个图不在同一面板上。

library ( ggplot2 )
library(gridExtra)
set.seed(12345)
N <- 10000
x <- rnbinom(N, 1, .15)
x = data.frame ( value=x, yyy= rep("z", length(x)))


g1 <- ggplot(x, aes(y=value, x=yyy))+
    geom_point(aes(fill = yyy), size = 3, shape = 21, position = position_jitterdodge(), alpha = .14 )+
    theme_bw()  + coord_flip() + theme(legend.position="left")


h1 = ggplot( x, aes(value)) +
    geom_histogram(aes(y = stat(density)), binwidth = .1) 

grid.arrange(g1, h1,  ncol=1 )

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以使用geom_point + geom_histogram主体轻松地将它们放置在同一图上。为此,您将需要手动调整两个参数:点在y轴上的位置(yPos)和垂直抖动强度(jit)。

yPos <- 1700
jit <- 100

ggplot(x) + 
    geom_point(aes(value, yPos, fill = yyy), 
               position = position_jitterdodge(jitter.height = jit), 
               size = 3, shape = 21, alpha = 0.14) +
    geom_histogram(aes(value), binwidth = 0.1) + 
    theme_bw() +
    theme(legend.position = "left")

最终解决方案如下:

enter image description here

答案 1 :(得分:0)

如果可以放宽将图例放在左侧的要求并将图例放到顶部,则可以使用 ggarrange ,两个图的y轴都将对齐

library ( ggplot2 )
library(ggpubr)

set.seed(12345)
N <- 10000
x <- rnbinom(N, 1, .15)
x = data.frame ( value=x, yyy= rep("z", length(x)))


g1 <- ggplot(x, aes(y=value, x=yyy))+
  geom_point(aes(fill = yyy), size = 3, shape = 21, position = position_jitterdodge(), alpha = .14 )+
  theme_bw()  + coord_flip() + theme(legend.position="top")


h1 = ggplot( x, aes(value)) +
  geom_histogram(aes(y = stat(density)), binwidth = .1) 


ggarrange(g1, h1,  ncol=1, nrow=2, align = "v" )