如何对齐两个具有背景图像的ggplot2图

How to align two ggplot2 plots where one has a background image

dww 回答我的以下 Whosebug post:

让我离我想去的地方很近了。除了当我将上一个图中绘制的图组合在一起时,带有背景图像 'bleeds' 的图进入绘图面板区域,而另一个图则没有。这显示在下面的屏幕截图中:

查看第一个绘图顶部的面板 space,以及右侧背景图像的绘图如何扩展其图像以填满绘图面板区域。如果我删除背景图像,那么两个图都会完美对齐。我试图限制背景图像不扩展并填充顶部和底部的面板区域。我不知道如何去做。示例代码如下:

ibrary(ggplot2)
library(readxl)
library(jpeg)
library(grid)

df_ct <- data.frame(X0 = 0:100)
df_ct$X1 = sin(df_ct$X0) +rnorm(101)

setwd('~/R/Image_Example')
image_file <- "C1_9195-9197.jpg"
img <- readJPEG(image_file)

g_hra <-ggplot(df_hra_plot_current) + geom_point(aes(x,y),size=0,color='white') +
  geom_rect(data=hra_rect,inherit.aes=FALSE, aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax,group=id,fill=factor(tier))) +
  scale_fill_manual(values = hra_color_vector) + guides(fill=FALSE) +
  scale_y_reverse() + ylab("Depth") +
  theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank(),
  axis.title.y=element_blank(), axis.text.y=element_blank()) +
  theme(plot.margin = unit(c(0,0,0,0), "lines"))

g <- rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc"), interpolate = FALSE)

g_ct <- ggplot(data=df_ct) +
  annotation_custom(g, -Inf, Inf, -Inf, Inf) +
  geom_path(aes_string(x=df_ct$X1, y=df_ct$X0), color='cyan') +
  scale_y_reverse("") +
  theme(plot.margin = unit(c(0,0,0,0), "lines"),
        axis.line.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.text.x = element_blank(),
        axis.line.y = element_blank() ) +
  scale_x_continuous("")

grid.arrange(g_hra, g_ct, ncol = 2)

所以这是我找到的哪种作品。我不知道这是否是处理它的最佳方法,但在这两个图中,我都将 expand = c(0,0) 放在 scale_y_reverse 和 scale_x_continuous 中,如下所示:

  g_ct <- ggplot(data=df_ct_current) +
    annotation_custom(g, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf) +
    geom_path(aes_string(x=df_ct_current$X1, y=df_ct_current$X0), color='cyan') +
    scale_y_reverse(expand = c(0,0)) +
    scale_x_continuous("", expand = c(0,0)) +
    theme(axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank()) +
    theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank()) +
    theme(plot.margin = unit(c(0,0,0,0), "lines"))

这允许绘图双向延伸到面板边距。