4

我正在尝试使用 ggplot2 绘制包含 2 组数据的直方图。我的数据集有 418 个值要绘制,有 2 组数据(所以我的直方图上会有 2 组彩色条)。令人讨厌的是,我无法重现iris数据集的问题:

library(ggplot2)
ggplot(iris, aes(x=iris[,1], fill=iris[,5])) + 
geom_histogram(binwidth=.5,alpha=.5)

这会创建一个很好的直方图。当我对我的数据进行尝试时,我得到:

Error : cannot allocate vector of size 4.0 Gb
In addition: Warning messages:
1: In anyDuplicated.default(breaks) :
  Reached total allocation of 16366Mb: see help(memory.size)
2: In anyDuplicated.default(breaks) :
  Reached total allocation of 16366Mb: see help(memory.size)
3: In anyDuplicated.default(breaks) :
  Reached total allocation of 16366Mb: see help(memory.size)
4: In anyDuplicated.default(breaks) :
  Reached total allocation of 16366Mb: see help(memory.size)
Error in UseMethod("scale_dimension") : 
  no applicable method for 'scale_dimension' applied to an object of class "NULL"

我有 16GB 的内存,所以生成一个包含 418 个数据点的图应该不是问题。

非常感谢任何帮助。


事实证明,即使引用列名,我的数据仍然不会绘制。我认为这是由于数据的范围。在对数据进行对数转换后,将绘制直方图。似乎 ggplot2 或 R 整体不喜欢 1-165476109 的范围,这是可以理解的......

4

1 回答 1

5

您的代码应如下所示:

ggplot(iris, aes(x=Sepal.Length, fill=Species)) + 
  geom_histogram(binwidth=.5,alpha=.5)

在此处输入图像描述

原因是 中的参数aes()是在您的数据环境中评估的。这意味着您的映射应该指向数据中的列名,即x=Sepal.Length)。

当您以您aes()的方式编写调用时,您试图告诉ggplot将 150 个不同的变量映射到x,并且类似于将 150 个不同的变量映射到fill- 这显然不是您的想法。

于 2012-06-21T11:21:24.020 回答