【问题标题】:Making scatter plot with ggplot2 leads to memory allocation issue使用 ggplot2 制作散点图会导致内存分配问题
【发布时间】:2012-02-14 02:33:14
【问题描述】:

(这里是 R 初学者...)我有一个数据集,例如:

> 头部(q) 日期时间系统用户 1 2011-10-01 00:00:01 12.4 4.6 2 2011-10-01 01:00:02 27.4 1.8 3 2011-10-01 02:00:01 15.2 1.0 4 2011-10-01 03:00:01 19.8 2.4 5 2011-10-01 04:00:02 19.2 3.4 6 2011-10-01 05:00:01 17.8 1.8 > 行(q) [1] 2207

“日期时间”由原始 csv 数据和 as.POSIXct(...) 组成 但是当我尝试超过 1300 行的情节时:

> qplot(q$'日期时间',q$'用户');dev.off() 错误:无法分配大小为 9.8 Gb 的向量

同样是这样的:

> ggplot(q,aes(q$'日期时间',q$'用户'))+geom_point(); dev.off() 错误:无法分配大小为 9.8 Gb 的向量

我该怎么做才能让它发挥作用?我想要分散在三个月内的系统性能指标 - 数据是每小时一次,所以大约有 2200 行。

【问题讨论】:

  • 我在交互式“R”会话中运行它,如果我从带有 Rscript 的脚本运行它,我似乎根本没有问题。我似乎有很多关于 R 内存管理的知识要学习 :)

标签: r memory-management ggplot2


【解决方案1】:

您使用的 aes 功能错误。你使用:

ggplot(q,aes(q$'Date Time',q$'User'))+geom_point()

正确的是:

ggplot(q,aes_string(x = 'Date Time', y = 'User')) + geom_point()

无需向 aes 提供数据向量。你可以试试看有没有帮助。 此外, 一个好的提示是使用ggsave 将您的ggplot 保存到文件中。

【讨论】:

  • 操作员已经告诉我们他的问题已经解决了,2200 点对于 9.8 GB 来说已经是小数目了。我将把答案作为绘制许多点的通用策略。
  • 你发现了我对 aes 的误解——它在交互式会话中产生了所有的差异——似乎带有双向量输入的 aes 疯了!感谢您提及 ggsave。
  • 我刚刚回到这个问题,当使用 qplot 而不是 ggplot 时,问题仍然存在于新会话/Rscript 中。我已经使用 melt 生成了一个名为 cpu 的缩减 data.frame,但“qplot(dt,value,data=cpu,geom="line",group=variable)" 仍然失败。有什么想法吗?
  • 您能创建一个可重现的示例吗?您可以通过在某处上传数据集或创建一个包含随机数和因子的模型数据集来做到这一点。
猜你喜欢
  • 2020-11-18
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 2013-09-22
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多