只有grobs可以在gList中使用

9

大家好 -- 有几个关于这个问题的问题,但没有一个解决我面临的问题。这是一段简单的代码片段。请问这里的问题是什么?

> grid.arrange(plot(rnorm(1000)),hist(rnorm(1000)), nrow=2, ncol=1)
Error in gList(list(wrapvp = list(x = 0.5, y = 0.5, width = 1, height = 1,  :
  only 'grobs' allowed in "gList"

2
@John Coleman是正确的,基础图形不是grobs。如果你真的想使用grid.arrange,你可以尝试像这个问题中使用grab_grob函数。https://dev59.com/ZFsX5IYBdhLWcg3wcPAE - Mike H.
1个回答

13

问题在于plot()hist()是基本图形,而不是网格或ggplot图形,因此它们不是grob(“grob”是“网格图形对象”的一个有点奇怪的缩写)。您可以找到等效的网格图或使用基本图形方法堆叠图。

您可以通过以下方式来实现后者:

> par(mfrow = c(2, 1))
> plot(rnorm(1000))
> hist(rnorm(1000)) #are you sure you want to make a hist of 1000 *different* random numbers?
> par(mfrow = c(1, 1)) #reset this parameter

输出:

输入图像描述

你也可以考虑使用layout。键入?layout获取详细信息。


谢谢@John Coleman!最好的解释。而且我使用rnorm的意图只是为了举例说明。我已经使用grid.arrange让它正常工作了,但现在使用qplot绘制直方图。它可以完美地工作了! - skafetaur
@skafetaur 我明白那只是一个例子。我曾经在教授统计课时(我是一名数学教师),使用过类似的例子,其中同一组随机数以不同的方式显示在堆叠图中,所以你的例子让我感到有些奇怪。我确实欣赏 R 的图形能力,但有时会发现它被分成不同的不兼容包,令人困惑。找到一个纯 grid.arrange 解决方案可能是最好的,但了解一些基本图形制作矩阵图的方法也是很好的。 - John Coleman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接