簡體   English   中英

使用“ hv”條件在plot_grid中指定繪圖高度:cowplot

[英]Specify plot height in plot_grid with 'hv' aligment: cowplot

我一直在使用來自cowplot的plot_grid命令來安排我的繪圖。 我使用了標簽功能,在這方面,我的圖看起來都一樣。 但是,當我“ hv”對齊某些具有非常不同的y軸限制的圖(例如下面的圖)時,似乎使用的是y范圍最短的圖的高度。

從Cowplot Hv對齊的污跡圖

如果我只是“ v”對齊圖,則在某些方面看起來會更好,但是很難調整圖的大小並使其標簽看起來不錯。 我希望繪圖高度不考慮x軸標簽等,就像上面一樣。

v對齊圖

使用gtables ,我可以獲得所需的寬度/高度(如下所示),但是這些使我在文檔中所有圖形上都沒有一致的標簽。 我可以在Cowplot中使用“ hv”對齊方式並指定要使用的繪圖高度嗎?

漂亮的情節,沒有標簽

library(ggplot2)
library(dplyr)
library(scales)
library(grid)
library(cowplot)

data(iris)

iris <- iris %>% mutate(Petal.Width2 = ifelse(Species == "setosa", Petal.Width * 75, Petal.Width))

p1 <- ggplot(data=iris, aes(x = factor(Species), y=Sepal.Width)) + 
  geom_bar(stat="identity") +
  labs(x = NULL, y = "Plot One") +
  scale_y_continuous(labels = percent) +
  theme(axis.text.x = element_blank(), 
        axis.title.y = element_text(vjust=1), plot.margin=unit(c(2,2,0,2),"mm"))

p2 <- ggplot(data=iris, aes(x = factor(Species), y=Petal.Width2)) + geom_bar(stat="identity") +
  labs(x = NULL, y = "Plot Two") +
  scale_y_continuous(labels = percent) +
  theme(axis.text.x = element_blank(), 
        axis.title.y = element_text(vjust=1), plot.margin=unit(c(0,2,0,2),"mm"))
p3 <- ggplot(data=iris, aes(x = factor(Species), y=Petal.Length*0+.01)) + geom_bar(stat="identity") +
  labs(x = "SPECIES", y = "The Third plot") +
  scale_y_continuous(labels = percent) +
  theme( axis.title.y = element_text(vjust=1, color="blue"), plot.margin=unit(c(0,2,0,2),"mm"),
         axis.text.x = element_text(angle = 90, hjust=1, vjust=1,face ="italic", size=10))

plot_grid(p1,p2,p3,ncol=1, align="v", labels=c("A", "B", "C"))

# https://stackoverflow.com/a/27408589/1670053
plots <- list(p1, p2, p3)
grobs = lapply(plots, ggplotGrob)
g = do.call(rbind, c(grobs, size="first"))

g$widths = do.call(unit.pmax, lapply(grobs, "[[", "widths"))
grid.newpage()
grid.draw(g)

添加標簽很容易,

plots <- list(p1, p2, p3)
grobs = lapply(plots, ggplotGrob)
library(gridExtra)
g = do.call(rbind, grobs) #  uses gridExtra::rbind.gtable
panels <- g$layout[g$layout$name=="panel",]

g <- gtable::gtable_add_grob(g, lapply(LETTERS[1:nrow(panels)],
                                       textGrob, vjust=1, y=1, 
                                       gp=gpar(fontface=2)), 
                             t=panels$t, l=2)

grid.newpage()
grid.draw(g)

在此處輸入圖片說明

暫無
暫無

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

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