【问题标题】:R plotting strangeness with large datasetR用大型数据集绘制奇异性
【发布时间】:2016-04-22 19:16:01
【问题描述】:

我有一个包含数百万个点的数据框 - 每个点都有两个值。

当我这样绘制时:

 plot(myData)

所有的点都画出来了,但是情节很忙,所以我想我会把它画成一条线:

 plot(myData, type="l")

但是虽然 x 轴没有改变(即从 0 到 7e+07),但实际绘图停止在 3e+07 左右,而且我实际上也没有得到正确的线图。

线图有限制吗?

更新 如果我使用

 plot(myData, type="h")

我得到了正确且可用的输出,但我仍然想知道为什么type="l" 选项失败得如此严重。

进一步更新

我正在绘制一个时间序列 - 这是一个使用 type="h" 的输出:

这很好用,但是有一条线可以让我比较几个输出。

【问题讨论】:

  • 您真的需要绘制百万个点吗?如果你画一条线会更忙,因为每个点位置都会被一条线连接起来。如果您真的想绘制每个点,那么仅减小点大小如何。您可以使用cex 参数来执行此操作,例如plot(myData, cex=0.3)
  • 或者,保留原来的点大小,并设置一个高度透明的 alpha 值,以便弹出更密集的区域,col="#00000022" 通常效果很好。
  • 这些点遵循相对平滑的曲线,所以一条线非常有意义——它是一个时间序列
  • 只有当您的数据框很大时才会发生这种情况?您是否尝试过将尺寸减半直到它停止发生?或许能给我们一点线索。此外,一个可重现的例子可能会有所帮助......
  • FWIW,我刚刚绘制了一个千万点的时间序列,没有问题(除了渲染需要一分钟左右)。这是代码:set.seed(4943); dat = data.frame(time=1:1e7, values=cumsum(rnorm(1e7))); plot(dat$time, dat$values, type="l").

标签: r plot


【解决方案1】:

高维数据图形表示是数据分析中日益严重的问题。实际上,问题不在于创建图表。问题是使图能够传达我们可以转化为有用知识的信息。请允许我举一个例子来说明这一点,通过考虑具有一百万个观察值的数据,也就是说,不是那么大。

x <- rnorm(10^6, 0, 1)
y <- rnorm(10^6, 0, 1)

让我们绘制它。 R 可以很容易地解决这样的问题。但是我们可以吗?可能不是。 毕竟,我们可以从墨水硬渍中推断出什么样的信息?大概,只不过是一个试图用茶叶、咖啡渣或葡萄酒沉淀物的图案来占卜未来的tasseographyst。

plot(x, y)

smoothScatter 函数代表了另一种方法。它创建双变量数据的密度图。在那里,我们创建了两个示例。

首先,使用默认值。

smoothScatter(x, y)

其次,将带宽指定为比默认稍大,并指定五个点使用不同的符号pch = 3显示。

smoothScatter(x, y, bandwidth=c(5,1)/(1/3), nrpoints=5, pch=3)

如您所见,问题并未解决。尽管如此,我们可以更好地掌握数据的分布。这种方法仍在发展中,有几个问题正在讨论和发展。如果这种方法代表了一种更合适的方法来表示您的大数据集,我建议您访问this blog 以彻底讨论该问题。

【讨论】:

  • 这个提议有用吗?
  • 不客气!我想我误解了你的问题。祝你好运!
【解决方案2】:

对于它的价值,我所拥有的所有证据都是计算机——即使它是一块大铁——内存不足。

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 2013-10-12
    • 2019-03-13
    • 1970-01-01
    • 2011-12-08
    • 2011-05-19
    • 2014-05-24
    • 2019-01-17
    相关资源
    最近更新 更多