如何对齐两个具有背景图像的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"))
这允许绘图双向延伸到面板边距。
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"))
这允许绘图双向延伸到面板边距。