ggplot中的一致绘图宽度(不计算标签)

时间:2017-08-10 13:33:53

标签: r ggplot2

当标签在不同地块之间变化时,如何自动准确地使绘图区域的宽度在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 个答案:

答案 0 :(得分: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

我仍然会通过牛皮画功能,如果我发现其他任何有用的东西,我会添加这个答案,但如果有任何读者知道其他任何内容,无论是否在牛皮图中,都不要让它阻止你添加另一个答案!