具有常见图例的 ggarrange 在降价中产生额外的空白图

Posted

技术标签:

【中文标题】具有常见图例的 ggarrange 在降价中产生额外的空白图【英文标题】:ggarrange with common legend produces extra blank plot in markdown 【发布时间】:2018-06-16 09:26:13 【问题描述】:

我正在使用 R Notebooks 并且有一个包含一些用于排列直方图的代码的块。当我使用一个常见的图例时,它会产生一个额外的空图,这在渲染的 html 文件中看起来很糟糕。这种现象在没有共同传说的情况下消失了,但情节看起来很糟糕,因为它们的大小不同。有什么办法可以阻止它产生额外的空图?

以及块中使用的代码

 ```r

ggarrange(

gghistogram(data, title="MOTIVATION SCORES", x="MOTIVATION", y="..density..", 
add_density=TRUE, add = "median", rug = TRUE, bins=15, color="#69c8ECFF", 
fill="#69c8ECFF") , 


gghistogram(data, title="MOTIVATION BY AGE GROUP", x = "MOTIVATION", 
y="..density..", add_density=TRUE,
          add = "median", rug = TRUE, bins=15,
          color = "AGE_GROUP", fill = "AGE_GROUP",
          palette = c("#69c8ECFF", "#E762D7FF")
          )

, legend = "bottom" 
, common.legend = TRUE

)
```

【问题讨论】:

你能分享dput(data)的输出吗?帮助你会更容易 我在使用 mtcars 数据时看到了同样的情况。 【参考方案1】:

编辑:如果您将下面的第二个块作为 rmarkdown 文档中的代码块运行,它仍会生成额外的空白图。如果您手动运行第二个块的每一行(即一次一个),它只会生成一个所需的图。我认为这仍然算作一个解决方案,因为即使一次运行第一个代码块也会导致额外的空白图。

这似乎重现了在 rnotebook 中运行时的问题:

p1 = ggplot(mtcars, aes(x = mpg, y = cyl)) +
    geom_point()
p2 = ggplot(mtcars, aes(x = drat, y = vs)) +
    geom_point()
ggarrange(p1, p2, ncol = 2, nrow = 1, common.legend = TRUE, legend = "bottom", labels = c("A", "B", "C"))

如果我将 ggarrange 对象分配给 p,那么问题就消失了:

p1 = ggplot(mtcars, aes(x = mpg, y = cyl)) +
    geom_point()
p2 = ggplot(mtcars, aes(x = drat, y = vs)) +
    geom_point()
p = ggarrange(p1, p2, ncol = 2, nrow = 1, common.legend = TRUE, legend = "bottom", labels = c("A", "B", "C"))
p

不知道为什么。对我来说非常不满意,但它似乎有效。

【讨论】:

如果您使用 ggplot 语法创建绘图,我建议使用 patchwork 包而不是 ggarrange。 如果p 在单独的代码块中,则不会产生空白图【参考方案2】:

您可以考虑切换到patchwork,而不是ggarrange。它没有那个“白页”问题,而且语法很好。

library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars, aes(x=mpg,y=disp)) + geom_point() + ggtitle("plotA")
p2 <- ggplot(mtcars, aes(x=mpg,y=qsec)) + geom_point() + ggtitle("plotB")
p3 <- ggplot(mtcars, aes(x="cars", y=hp)) + geom_boxplot() + ggtitle("plotC")

#/ Lets make P1 and P2 share a column, and give P3 its own column:
p1 / p2 | p3

【讨论】:

以上是关于具有常见图例的 ggarrange 在降价中产生额外的空白图的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化为组合图添加综合图例实战:使用ggpubr包ggarrange函数实现综合图例使用patchwork包实现综合图例

使用 ggarrange 添加行和列标题

使用相同的标签和颜色为不同的图形手动斜体和着色图例

一个图例中的重复变量(据我所知,这不是常见问题!)

R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将多个可视化结论嵌套起来输出(ggarrange组合ggarrange组合后的图像)

SQL每个月份的发生额都比101科目多的科目