为什么我的R代码生成多行和条形图这么慢?

时间:2013-12-20 20:29:45

标签: r plot ggplot2

我正在努力制作一些相互关联的情节,这些情节结合了R中的几个数据集。ggplot2对这项努力非常有用,但是人类很慢。我意识到我正在处理大量的数据点,但我认为我在任何地方都有一个任意的瓶颈。让我解释一下......

我有10个不同的向量,每个长150,000个条目。我想使用ggplot2在命令行上创建一个带有这些的图形,并将生成的png保存到磁盘。 10个矢量中的每一个将是不同的颜色,一些将是线条,一些将是条形。代码如下所示:

bulk = data.frame(vector1=c(1,5,3,5,...), ... vector10=c(5,3,77,5,3, ...))
png(filename="figure.png", width=4000, height=800)
ggplot(bulk, aes(x=vector1), aes(alpha=0.2)) +
geom_bar(aes(y=vector2), color="red", stat="identity") +
geom_bar(aes(y=vector3), color="black", stat="identity") +
..................
geom_line(aes(y=vector10), color="black", size=1) +
scale_y_log10()

请记住我有10个向量,每个150,000个条目长,所以我有1.5M数据点来绘制。但是,我使用的是具有32GB RAM的8核4Ghz /核心机器,但是R几乎没有RAM,只有1个核心。这是预料之中的,因为据我所知这个过程不能是多线程的,但渲染真的需要每个数字大约1个小时吗?

感觉就像我的代码是任意膨胀这个处理时间。特别是因为每10个矢量20,000个条目的相同问题仅需要大约20秒。将其缩放比线性缩放时间要多。

有没有人对这个问题有解决方案或怀疑?谢谢你的帮助!

3 个答案:

答案 0 :(得分:6)

如果您想要或需要绘制那么多点,您必须使用base R. ggplot对于中到大数据集非常慢。这个问题是known,我不知道从那以后事情是否已经改变了性能。使用更快的机器也不会产生太大的影响。尝试基础R.根据我的经验,即使对于非常大的信息图和可视化,它也要快得多。

答案 1 :(得分:1)

要考虑的一点是,不同的geom需要花费更多或更少的时间,并且由于某些原因我无法真正解决,geom_bar是最慢的(与geom_area一起)。尝试使用不同的geom,至少在绘制原型图时。您可以切换到最终生产图的栏。

答案 2 :(得分:0)

根据我的经验,添加alpha参数似乎会大大减缓绘图的生成。

例如,在我目前正在从事的项目中,我正在绘制31 000个数据点的地图。在此之上,我还添加了另外6000个数据点的层。如果正常绘制,则需要1.2秒。如果用alpha=0.7绘制了6000个数据点,则将花费12.6秒。在shapesize上使用不同的设置进行试验并不会严重影响计算时间。