【问题标题】:Horizontal alignment of colour scales in patchwork拼凑中色标的水平对齐
【发布时间】:2021-05-16 08:23:50
【问题描述】:

我正在使用包patchwork 来垂直组合多个ggplot2 绘图。无论比例名称的长度如何,我都希望每个地块的比例直接在另一个上方。目前,这些比例没有相互对齐。

如果可以使用ggpubrfacet_grid(),我愿意使用它们,但我已经看到doesn't allow multiple scales 的各个方面,我还没有找到使用ggpubr 的任何解决方案

library(ggplot2)
library(patchwork)

set.seed(0)
testdata <- data.frame(x=1:10, y=1:10, col=runif(10))

g1 <- ggplot(testdata, aes(x=x,y=y,col=col)) + geom_point() + 
  scale_color_gradient(name="Short")
g2 <- ggplot(testdata, aes(x=x,y=y,col=col)) + geom_point() + 
  scale_color_gradient(name="A rather longer name")
g1/g2

ggsave("testfile.tiff", units = "mm", device="tiff", 
       width=100, height=100, dpi = 100)

理想输出:

【问题讨论】:

标签: r ggplot2 patchwork


【解决方案1】:

使用plot_layout,您可以“收集”图例。这使用默认的theme(legend.position = 'right')。如果您想更改图例的位置,您可以在 plot_layout 之后添加 &amp; theme(legend.position = 'right') 并调整位置。

g1/g2 + plot_layout(guides = 'collect') # & theme(legend.position = 'right') <- adjust position here!

ggsave("testfile.tiff", units = "mm", device="tiff", 
       width=100, height=100, dpi = 100)  

【讨论】:

  • 太好了,我鼓励提问者更喜欢这个答案而不是我的答案。
  • 我在这里似乎没有看到预期的效果。运行g1/g2 + plot_layout(guides="collect") 将底部导轨向上移动,顶部导轨向下移动,使它们靠得更近,但不会改变它们的水平对齐方式。
  • 也许你的意思是theme(legend.box.just = 'left') - 这似乎解决了它
  • @Miff,在我的机器上,一切都是开箱即用的,但这是一个干净的会话。 ` & theme(legend.box.just = 'left')` 或&amp; theme(legend.position = 'right') 都和上图一样。如果除了标题之外图例相同,您可能希望重命名标题以将它们全部合并为 1 个图例。或者您可以查看 guide_area 以将所有图例收集到图形空间的 1 个位置。
【解决方案2】:

我也很想知道可以解决此问题的拼凑参数,但我认为没有(如果我错了,请纠正我)。您可能已经注意到,Hadley 的答案已有 10 多年的历史,从那时起人们一直在研究 ggplot2。 ggnewscale 包解决了每个地块有多个比例的问题。这是一种使用多色标的分面方法:

library(ggplot2)
library(ggnewscale)

set.seed(0)
testdata <- data.frame(x=1:10, y=1:10, col=runif(10))

ggplot(mapping = aes(x = x, y, y)) +
  geom_point(data = transform(testdata, 
                              facet = factor("Top", c("Top", "Bottom"))),
             aes(colour = col)) +
  scale_colour_continuous(name = "Short") +
  new_scale_colour() +
  geom_point(data = transform(testdata,
                              facet = factor("Bottom", c("Top", "Bottom"))),
             aes(colour = col)) +
  scale_colour_continuous(name = "A rather longer name") +
  facet_wrap(~ facet, ncol = 1)

【讨论】:

  • 这可以正确解决问题,但缺点是比例尺不能很好地与具有多个方面的图垂直匹配。
猜你喜欢
  • 2020-04-09
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2022-06-18
相关资源
最近更新 更多