【问题标题】:allign dimensions of separat plots对齐单独绘图的尺寸
【发布时间】:2019-12-19 08:12:20
【问题描述】:

cowplot 和 pathwork 等包允许对齐不同的图 下一个/在彼此上,绘图区域尺寸同步,无论所需的空间如何 轴标签。 例如

install.packages("ggridges")
install.packages("patchwork")
library(tidyverse)
library(ggridges)
library(patchwork)
p1 <- ggplot(iris, aes(Sepal.Length, Species)) + 
    geom_density_ridges() 
p2 <- ggplot(mtcars) + 
    geom_point(aes(mpg, disp))
p1 + p2  + plot_layout(ncol=1)  #different length of y axis label, same plot area size.

这对于 html 显示来说都是很好的。 但是,对于期刊,我和许多其他人需要制作“独立”的情节。 图表显示来自不同来源的数据并具有不同的轴标签长度。 为了获得专业的外观,这些地块还需要具有相同的地块大小。 在文章格式中,它们通常会出现在相同格式的页面但它们之间有文本的情况下,并且

那么,我如何使它们需要完全“对齐”(如上例所示),但可以说是单独的 r 个对象。

我怎样才能做到这一点?

【问题讨论】:

  • 这并不容易。虽然我有点讨厌自己建议它,但将拼凑图保存为 pdf 然后将其“剪切”为单独的图可能是最简单的解决方法。另一种选择是使用降价并指定绘图宽度。这里有很多关于这个的线程,一个好的起点可能在这里:stackoverflow.com/q/39634520/7941188。也可能有帮助:stackoverflow.com/questions/46840724/…。或者@dww 不久前对我自己的一个问题的回答stackoverflow.com/a/48671508/7941188
  • P.S.我正在做的是通常将我的图打印为具有相同宽度尺寸的 pdf(我通常使用ggsave(plot = x, filename = 'x.pdf', width = ..., height = ...)。会产生非常相似的轴长度,但不完全相同。如果对象分布在几页上,这很可能不会很明显,所以这将是最简单的选择。
  • @Tjebo 感谢您的提示,我有时也会手动操作,您并不孤单:p。请参阅下面的建议以获取解决方案并祝您节日快乐

标签: r ggplot2 graphics


【解决方案1】:

在cowplot 内部,有一个函数align_margin 可以在ggplot grobs 列表中对齐左右边距。

我们还包括了一些图:

p1 <- ggplot(iris, aes(Sepal.Length, Species)) + 
    geom_density_ridges() 
p2 <- ggplot(mtcars) + 
    geom_point(aes(mpg, disp))
p3 <- ggplot(PlantGrowth) + 
    geom_boxplot(aes(group, weight))
p4 <- ggplot(USArrests) + 
    geom_point(aes(Assault, UrbanPop))

the vignette做了一些细微的修改:

grobs <- lapply(list(p1, p2, p3,p4), as_grob)
plot_widths <- lapply(grobs, function(x) {x$widths})
aligned_widths <- align_margin(align_margin(plot_widths, "first"),"last")
# reset widths
for (i in seq_along(plots)) {
       grobs[[i]]$widths <- aligned_widths[[i]]
     }

在一个页面中获取所有内容:

plot_grid(plotlist = grobs, ncol = 1)

获取个人:

grid.draw(grobs[[1]])

【讨论】:

  • 这样就行了。也是一种相当简单的方法,所以我可能会经常使用它。谢谢@StupidWolf
  • 是的,出版可能会很痛苦,很高兴减轻痛苦:)
猜你喜欢
  • 2015-03-17
  • 2015-09-16
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
相关资源
最近更新 更多