嗨,我想在密度图的上方叠加一个点图。我可以用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 )
答案 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")
最终解决方案如下:
答案 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" )