R ggplot2-多个绘图缩放

R ggplot2-多个绘图缩放,r,ggplot2,R,Ggplot2,我尝试使用ggplot2生成多个栅格图。所以我想用x轴下方的附加箱线图以及不同组和变量的箱线图生成分布图,如下所示: 代码:我尝试用以下代码来实现这一点: library(ggplot2) require(grid) x=rbind(data.frame(D1=rnorm(1000),Name="titi",ID=c(1:1000)), data.frame(D1=rnorm(1000)+1,Name="toto",ID=c(1:1000))) space=1 suite=1 p1

我尝试使用ggplot2生成多个栅格图。所以我想用x轴下方的附加箱线图以及不同组和变量的箱线图生成分布图,如下所示:

代码:我尝试用以下代码来实现这一点:

library(ggplot2)
require(grid)

x=rbind(data.frame(D1=rnorm(1000),Name="titi",ID=c(1:1000)),
    data.frame(D1=rnorm(1000)+1,Name="toto",ID=c(1:1000)))

space=1
suite=1
p1=ggplot(x, aes(x=D1, color=Name, fill=Name)) + 
geom_histogram(aes(y=..density..),alpha=0.35,color=adjustcolor("white",0),position="identity",binwidth = 0.05)+
  geom_density(alpha=.2,size=1)+
  theme_minimal()+
  labs(x=NULL,y="Density")+
  theme(legend.position = "top",
        legend.title = element_blank())+
  scale_fill_manual(values=c("gray30","royalblue1"))+
  scale_color_manual(values=c("gray30","royalblue1"))

p2=ggplot(x, aes(x=factor(Name), y=D1,fill=factor(Name),color=factor(Name)))+
  geom_boxplot(alpha=0.2)+
  theme_minimal()+
  coord_flip()+
  labs(x=NULL,y=NULL)+
  theme(legend.position = "none",
        axis.text.y = element_blank(),
        axis.text.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.x = element_blank(),
        panel.grid.minor.y = element_blank(),
        panel.grid.major.y = element_blank())+
  scale_fill_manual(values=c("gray30","royalblue1"))+
  scale_color_manual(values=c("gray30","royalblue1"))

grid.newpage()
pushViewport(viewport(layout=grid.layout(5,1)))
define_region <- function(row, col){
  viewport(layout.pos.row = row, layout.pos.col = col)
}
print(p1, vp=define_region(1:4,1))
print(p2, vp=define_region(5,1))
库(ggplot2)
需要(网格)
x=rbind(数据帧(D1=rnorm(1000),Name=“titi”,ID=c(1:1000)),
data.frame(D1=rnorm(1000)+1,Name=“toto”,ID=c(1:1000)))
空间=1
套房=1
p1=ggplot(x,aes(x=D1,颜色=名称,填充=名称))+
几何图形直方图(aes(y=…密度…),alpha=0.35,颜色=adjustcolor(“白色”,0),位置=identity,binwidth=0.05)+
几何密度(α=0.2,尺寸=1)+
主题_极小值()+
实验室(x=NULL,y=“密度”)+
主题(legend.position=“top”,
legend.title=元素_blank())+
比例填充手动(值=c(“灰色30”、“蓝色1”))+
比例\颜色\手册(值=c(“灰色30”,“蓝色1”))
p2=ggplot(x,aes(x=因子(名称),y=D1,填充=因子(名称),颜色=因子(名称)))+
geom_箱线图(α=0.2)+
主题_极小值()+
coord_flip()+
实验室(x=NULL,y=NULL)+
主题(legend.position=“无”,
axis.text.y=元素_blank(),
axis.text.x=元素_blank(),
panel.grid.minor.x=元素_blank(),
panel.grid.major.x=元素_blank(),
panel.grid.minor.y=元素_blank(),
panel.grid.major.y=元素_blank()+
比例填充手动(值=c(“灰色30”、“蓝色1”))+
比例\颜色\手册(值=c(“灰色30”,“蓝色1”))
grid.newpage()
推送视口(视口(布局=网格布局(5,1)))

使用
cowplot
包定义_区域,这会变得更容易一些。但是,我们应该正确设置x轴范围,以确保两个图的x轴范围相同。这是因为密度图自然比纯数据图宽一点,因此
p1
的轴也会宽一点。当轴固定后,我们可以排列和对齐它们(轴文本和边距将不再重要)


@Henrik非常感谢您的选择。我已经测试过这个解决方案,但我对此没有信心。添加行
p2
library(cowplot)
comb <- plot_grid(
  p1 + xlim(-5, 5), 
  p2 + ylim(-5, 5), # use ylim for p2 because of coord_flip()
  align = 'v', rel_heights = c(4, 1), nrow = 2
)
plot_grid(comb, comb, comb, comb)