我正在努力制作一些相互关联的情节,这些情节结合了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秒。将其缩放比线性缩放时间要多。
有没有人对这个问题有解决方案或怀疑?谢谢你的帮助!
答案 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秒。在shape
和size
上使用不同的设置进行试验并不会严重影响计算时间。