簡體   English   中英

將標簽添加到由grid.arrange繪制的繪圖中

[英]Add labels to a plot made by grid.arrange from multiple plots

我在此鏈接中有一個數據框,並且我有以下代碼:

 load("Fish11a.rda") df=Fish11a df=data.frame(Time=as.factor(df[,6]),RoiID=df[,3],Diameter=df[,8]) df$Time.hours=rep(1:10,each=104*max(df$RoiID),len=nrow(df)) df$Time <- factor(df$Time, levels=rev(levels(df$Time))) df1=split(df,df$Time.hours) br=lapply(split(df,df$Time.hours), function(x) { br=data.frame(x[c(1,round(nrow(x)*(1:4)/4)),]) br$Min=c(0,15,30,45,60) return(br) }) hle1=function(dfr,br,tenplot) { require(ggplot2) require(gtable) library(grid) #start plot g=ggplot(data=dfr, aes(x=factor(RoiID), y=Time, fill = Diameter)) + theme_minimal() + coord_fixed(ratio=1) + geom_tile(colour = NA, width = 1.5, height = 1)+ scale_fill_gradient(low="black",high="white")+ theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank())+ scale_x_discrete(expand = c(0,0))+ scale_y_discrete(name="Time (min)", expand = c(0,0), breaks=br$Time,labels=br$Min)+ theme(axis.ticks.length = unit(0, "lines"))+ ggtitle(tenplot)+ theme(plot.title = element_text(size = 10, face = "bold")) # calculate segment coordinates segs <- c(.39, .23, .23, .15) segs_center <- cumsum(segs) - segs/2 seg_ticks <- cumsum(segs)[1:3] seg_labels <- paste("S",seq_along(segs)) # create graphicaal objects and gather as tree grobs <- grobTree(linesGrob(c(0,1), c(-1,-1),gp=gpar(lwd=3)), segmentsGrob(x0=seg_ticks, x1=seg_ticks, y0=0, y1=-4,gp=gpar(lwd=2.5)), textGrob(x=segs_center, y=-5, label = seg_labels, hjust = 0, gp = gpar(cex =.8))) # insert grobsTree in as annotation g <- g + annotation_custom( grob = grobs, ymin = -.3, ymax = 0.2, xmin = .25, xmax = max(dfr$RoiID)) # override clipping for plotting outside of plotting area gt <- ggplot_gtable(ggplot_build(g)) gt$layout$clip[gt$layout$name == "panel"] <- "off" grid.newpage() #grid.draw(gt) gt } #Draw and save plots tiff(file="test11.tiff", width = 45,height=28, units = 'cm', res = 300) require(gridExtra) grid.arrange(hle1(df1$"1",br$"1",c("1 hour-feed")), hle1(df1$"2",br$"2",c("2 hours-feed")), hle1(df1$"3",br$"3",c("3 hours-feed")), hle1(df1$"4",br$"4",c("4 hours-feed")), hle1(df1$"5",br$"5",c("5 hours-feed")), hle1(df1$"6",br$"6",c("6 hours-feed")), hle1(df1$"7",br$"7",c("7 hours-feed")), hle1(df1$"8",br$"8",c("8 hours-feed")), hle1(df1$"9",br$"9",c("9 hours-feed")), hle1(df1$"10",br$"10",c("10 hours-feed")), ncol=5,top=textGrob("Fish 11 - feed",gp=gpar(fontsize=18))) dev.off() 

我想在每行圖的左側添加標簽(26ppm,39ppm),然后將標題(Fish 11-feed)向下移動,如下圖所示:(P / S:(Fish 11-feed)的刪除線和(不是此位置)是注釋,未包含在圖像中)。

期待您的幫助。 非常感謝你!
在此處輸入圖片說明

編輯gtable可能是最容易的,例如,通過在左側添加帶有行標簽的列。 這是一個為方便起見將標簽存儲在tableGrob中的示例,但是您也可以手動進行操作。 您的示例中頂部標簽的額外空間可能是由於繪圖邊距所致,可以在theme()中進行設置。

library(ggplot2)
library(gridExtra)
library(grid)

my_fun <- function(id){
  ggplot() + ggtitle(paste(id, "hours-feed"))
}

pl <- lapply(seq_len(10), my_fun)

lg <- tableGrob(c("", "26ppm", "39ppm"), theme= ttheme_minimal())
rg <- arrangeGrob(grobs = pl, ncol=5,
             top = textGrob("Fish 11 - feed",gp=gpar(fontsize=18)))

grid.newpage()
grid.draw(cbind(lg, rg, size = "last"))

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM