2017-08-10 49 views
1

如何在標籤在標籤間變化時自動準確地將繪圖區域的寬度與ggplot保持一致?例如,下面是兩張圖(數據和代碼跟隨),其中第二張圖的標籤較長,因此繪圖區的寬度變得更小以騰出空間。ggplot中的一致繪圖寬度(不包括標籤)

我知道我可以在第二個圖上手動使圖形寬度變寬,但是1)我不能以編程方式做到這一點,2)除非我有足夠的耐心和時間,否則它不會確切。

我甚至不知道如何搜索我在這裏稱爲「繪圖區」的內容,所以即使在術語中提供任何幫助都是有幫助的。

first plot is wider second plot is narrower

這裏的代碼來生成數據和圖表:

set.seed(5) 
d1 <- expand.grid(x=LETTERS[1:3], g=letters[1:3], rep=1:10) 
d1$y <- round(rnorm(nrow(d1), 10, 2), 1) 
d2 <- expand.grid(x=LETTERS[1:3], g=letters[1:3], rep=1:10) 
d2$y <- round(rnorm(nrow(d1), 10, 2), 1) 
levels(d2$x) <- sapply(levels(d2$x), strrep, 10) 
levels(d2$g) <- sapply(levels(d2$g), strrep, 10) 

library(ggplot2) 
p1 <- ggplot(d1) + aes(x, y, color=g) + geom_boxplot() + coord_flip() 
p2 <- ggplot(d2) + aes(x, y, color=g) + geom_boxplot() + coord_flip() 
ggsave("test1.pdf", p1) 
ggsave("test2.pdf", p2) 
+1

'cowplot'中可能會有一些有用的對齊工具... –

+0

我正在調查它,謝謝! – Aaron

+0

你可以看看[this](https://stackoverflow.com/questions/16255579/how-can-i-make-consistent-width-plots-in-ggplot-with-legends),問題已經解決了 –

回答

1

感謝@BenBolker,我學習cowplot。它具有align_plots功能用於此目的(未示出輸出),

both2 <- align_plots(p1, p2, align="hv", axis="tblr") 
p1x <- ggdraw(both2[[1]]) 
p2x <- ggdraw(both2[[2]]) 
save_plot("cow1.png", p1x) 
save_plot("cow2.png", p2x) 

並且還plot_grid節省的曲線相同的文件。

library(cowplot) 
both <- plot_grid(p1, p2, ncol=1, labels = c("A", "B"), align = "v") 
save_plot("cow.png", both) 

enter image description here

我仍然可以通過cowplot功能會,並會添加到這個答案,如果我找到別的有用的,但如果任何任何讀者都知道一樣,無論是在cowplot與否,不要」讓它阻止你添加另一個答案!

+0

複製了此答案中的信息https://stackoverflow.com/a/45616684/210673 – Aaron