减少牛皮画中的空白边距

时间:2018-05-17 21:08:17

标签: r ggplot2 cowplot

用于此问题的数据和库:

library(tidyverse)
library(reshape2)
library(cowplot)
data("diamonds")
temp1_m <- temp2_m <- melt(diamonds[1:3])
temp1_m[3] <- temp2_m[3] <- NULL
colnames(temp1_m) <- colnames(temp2_m) <- c('Var1', 'Var2', 'value')

我正在尝试使用geom_tile库合并两个cowplot图。 两个单独的图使用:

创建
figMT <- ggplot(temp2_m, aes(Var1, Var2))+
    geom_tile(aes(fill = value), colour = 'white')+
    scale_fill_gradient(low = 'green', high = 'red', name = 'log fold change',
    guide = guide_legend(title.vjust = 1, reverse = T))+
    ggtitle('Mutant clusters')+
    scale_x_discrete(expand = c(0, 0))+
    scale_y_discrete(limits = rev(levels(temp2_m$Var2)))+
    xlab('')+
    ylab('')+
    coord_equal()+
    theme(axis.text.x = element_text(angle = 45, hjust = 1),
    axis.text = element_text(size=12),plot.margin=grid::unit(c(0,0,0,0), "mm"))

figWT <- ggplot(temp1_m, aes(Var1, Var2))+
    geom_tile(aes(fill = value), colour = 'white')+
    scale_fill_gradient(low = 'green', high = 'red', name = 'log fold change',
    guide = guide_legend(title.vjust = 1, reverse = T))+
    ggtitle('WT clusters')+
    scale_x_discrete(expand = c(0, 0))+
    scale_y_discrete(limits = rev(levels(temp1_m$Var2)))+
    xlab('')+
    ylab('Cluster')+
    coord_equal()+
    theme(axis.text.x = element_text(angle = 45, hjust = 1),
    axis.text = element_text(size=12),plot.margin=grid::unit(c(0,0,0,0), "mm"))

然后我使用cowplot首先用:

制作标题
title <- ggdraw()+
  draw_label("Heatmaps over the average fold change of the clusters", fontface='bold')

然后将标题和两个图结合起来:

p <- plot_grid(figWT+ theme(plot.margin = unit(c(0, -10, 0, 0), "cm")),
               figMT+ theme(plot.margin = unit(c(0, 0, 0, -5.1), "cm")),
               labels=c('A', 'B'), hjust = c(-24, -.5))
plot_grid(title, p, nrow=2, rel_heights=c(0.1, 1))

我将两个热图之间的空白移动到一起后减少了很多空白。但它在左右边缘创建了很多空格,我无法删除。也就是说,当我用以下内容保存图片时:

ggsave('ex1.pdf', scale = 2)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

通过添加coord_equal(),您将设置固定宽高比坐标系,这意味着您需要使最终输出文件的宽高比与基础图的宽高比相匹配。如果未在ggsave()行中指定宽度和高度,则基本上可以保证无法获得正确的输出。此外,如果你发现自己设置了较大的负边距,你肯定知道你做错了什么。

如果不确切知道预期的输出是什么,这对我来说似乎是合理的:

p <- plot_grid(figWT, figMT, labels=c('A', 'B'))
plot_grid(title, p, nrow=2, rel_heights=c(0.1, 1))
ggsave("ex1.png", width = 8, height = 4.5, dpi = 300)

enter image description here