我有一个大约有2000万行的输入文件。文件的大小约为1.2 G.无论如何,我可以在R中绘制数据。有些列有类别,大多数是数字。
我已经尝试了我的绘图脚本,输入文件的一小部分大约800K行,但即使我有大约8G的RAM,我似乎无法绘制所有数据。有没有简单的方法来做到这一点。
答案 0 :(得分:13)
如果没有更清楚地描述你想要的情节,很难给出具体的建议。但是,一般情况下,无需在绘图中绘制2000万个点。例如,时间序列可以由样条拟合或某种平均值表示,例如,将每小时数据汇总到每日平均值。或者,您绘制一些数据子集,例如在时间序列的例子中,每天只有一个点。所以我认为你的挑战不是在一个情节上得到20M点,甚至是800k,而是如何有效地聚合你的数据,以便传达你想要告诉的信息。
答案 1 :(得分:4)
根据Ben Bolker在Speed up plot() function for large dataset中的建议,用于绘制hexbins而不是散点图的包hexbin用于为我提供200万条相当于4GB RAM的记录。但是对于同一组变量,它失败了2亿条记录/行。我尝试减小bin大小以调整计算时间与RAM使用率,但它没有帮助。
对于2000万条记录,您可以尝试使用xbins = 20,30,40的hexbins。
答案 2 :(得分:3)
直接绘制到光栅文件设备(例如,调用png()
)要快得多。我尝试绘制rnorm(100000)
并且在我的笔记本电脑上X11 cairo绘图耗时2.723秒,而png
设备耗时2.001秒。有100万分,数字是27.095和19.954秒。
我使用Fedora Linux,这是代码。
f = function(n){
x = rnorm(n)
y = rnorm(n)
png('test.png')
plot(x, y)
dev.off()}
g = function(n){
x = rnorm(n)
y = rnorm(n)
plot(x, y)}
system.time(f(100000))
system.time(g(100000))
答案 3 :(得分:1)
使用memory.limit()增加内存帮助我...这是用于绘制ggplot近36K的记录。
答案 4 :(得分:0)
使用memory.limit(size=2000)
(或更大的东西)帮助扩展可用内存吗?