9

我想使用cowplot将一些图表组合在一起。但我无法更改边距大小。我只想使用一个 y 轴,但余量仍然很大,我想减少。我使用了 ggplot 中的 plot.margin 代码,虽然当我查看单个图时它有效,但当图合并时它似乎不起作用。

我做了一些示例代码:

library(ggplot2) 
library(cowplot)

x <- c("a", "b") 
y1 <- c(3,6) 
y2 <- c(10,15) 
data1 <- data.frame(x,y1) 
data2 <- data.frame(x, y2)

ylab1 <- ylab("Very nice y values") 
xlab1 <- xlab("Very nice factors")

plot1 <- ggplot(data1, aes(x=x, y = y1)) +    
geom_bar(stat ="identity", position=position_dodge(), fill = "grey")+  
theme(plot.margin = unit(c(0.5,0.5,0.5,0.5), "cm")) + xlab1 + ylab1
plot1

ylab2 <- ylab("") 
xlab2 <- xlab("Very nice factors") 

plot2 <- ggplot(data2, aes(x=x, y = y2)) +    
geom_bar(stat = "identity",position=position_dodge(), fill = "grey")+   
theme(plot.margin = unit(c(0.5,0.5,0.5,-0.5), "cm")) +    xlab2 + ylab2 
plot2

plot3 <- plot_grid(plot1, plot2, labels = c("A", "B"), align = "hv",nrow = 1, ncol = 2) 

plot3  # Quite large margin between the two plots

我知道我可以通过使用构面来避免这个问题,但是我的真实情节比这张图要复杂得多。

在此处输入图像描述

4

2 回答 2

13

增加地块之间的空间plot_grid也在这个问题中得到解决。

另一个有趣的解决方案是此评论中建议的解决方案- 尝试在两个图之间添加一个额外的空图并调整相对列宽:

plot4 <- plot_grid(plot1, NULL, plot2, rel_widths = c(1, 0, 1), align = "hv",
          labels = c("A", "B"), nrow = 1)
plot4

在此处输入图像描述

甚至可以在 中尝试负值rel_widths,从而得到更好的结果:

plot5 <- plot_grid(plot1, NULL, plot2, rel_widths = c(1, -0.1, 1), align = "hv",
                   labels = c("A", "B"), nrow = 1)
plot5

在此处输入图像描述

因此,尝试结合调整plot.margin(如@J.Con 回答)和添加一个额外的空图与调整rel_widths


编辑 2019-12-11

另请查看(Claus Wilke)的作者的评论:cowplot

对于这些类型的问题,我现在推荐patchwork图书馆。plot_grid()由于其底层设计,它本质上是困难的

因此,一个patchwork基于他们的小插图添加注释和样式的快速示例如下所示:

library(patchwork)

plot3 <- plot1 + plot2 +
  plot_annotation(tag_levels = 'A') & 
  theme(plot.tag = element_text(size = 8))
plot3

reprex 包(v0.3.0)于 2019 年 12 月 11 日创建

于 2018-10-22T21:03:40.343 回答
5

plot.margin的 s 实际上对你不利。将它们设置为零以填充该空白区域。

plot1 <- ggplot(data1, aes(x=x, y = y1)) +    
  geom_bar(stat ="identity", position=position_dodge(), fill = "grey")+  
  theme(plot.margin = unit(c(0,0,0,0), "cm")) + xlab1 + ylab1
plot1

ylab2 <- ylab("") 
xlab2 <- xlab("Very nice factors") 

plot2 <- ggplot(data2, aes(x=x, y = y2)) +    
  geom_bar(stat = "identity",position=position_dodge(), fill = "grey")+   
  theme(plot.margin = unit(c(0,0,0,0), "cm")) +    xlab2 + ylab2 
plot2

plot3 <- plot_grid(plot1, plot2, labels = c("A", "B"), align = "hv",nrow = 1, ncol = 2) 

plot3

在此处输入图像描述

于 2017-05-01T02:26:14.253 回答