如何使R绘图更快

16
我们正在使用R来生成图形(热图),这些图形将在一个闪亮的应用程序(网页)上呈现。目前,我们面临的问题是R渲染图形所需的时间,不包括计算时间。让我通过一个虚构的例子来展示相同的情况。在这个基本测试案例中,R需要大约17秒的时间来渲染并保存一个热图文件为png格式(行和列聚类已经预先计算好了)。
我想知道是否有办法显著减少渲染此类型图形所需的时间。也许我错过了一些其他常数计算,可以从热图函数中去除。
谢谢!
生成数据
m1 <- matrix(rnorm(500000,mean=15,sd=4),ncol=100)
m2 <- matrix(rnorm(500000,mean=30,sd=3),ncol=100)
m <- cbind(m1,m2)
dim(m)

基本热力图与所有计算

png('test_heatmap.png')
system.time(heatmap(m))

user  system elapsed 
29.327   0.637  30.526 

在热图函数之外进行聚类:主要是为了测试绘图渲染时间。

> system.time(hcr <- hclust(dist(m)))
   user  system elapsed 
  9.992   0.126  10.144 
> system.time(hcc <- hclust(dist(t(m))))
   user  system elapsed 
  0.659   0.002   0.662 
> system.time(ddr <- as.dendrogram(hcr))
   user  system elapsed 
  0.498   0.010   0.508 
> system.time(ddc <- as.dendrogram(hcc))
   user  system elapsed 
  0.011   0.000   0.011 

使用预计算的行/列树状图的热力图渲染时间
png('test_heatmap.png')
> system.time(heatmap(m,Rowv=ddr,Colv=ddc))
   user  system elapsed 
 16.128   0.558  17.171 

8
尝试在heatmap中设置 useRaster=TRUE。该参数的文档已在?image中列出。 - Roland
@Roland:感谢您的快速回复。我应该在哪里使用这个选项?很抱歉,快速搜索并没有帮助我太多。 - Abhi
谢谢...我也觉得这很有帮助。http://blog.revolutionanalytics.com/2011/07/paul-murrell-on-incorporating-images-in-r-charts.html - Abhi
1
raster包也可能会引起兴趣。 - Roland
2
Javascript渲染?http://joecheng.com/R/heatmap.html;讨论:https://groups.google.com/d/topic/shiny-discuss/rJhy5sUOe1U/discussion - Stéphane Laurent
显示剩余5条评论
2个回答

2

geom_raster( )是ggplot2包中提供的功能,可实现高性能平铺。一旦完成了聚类操作,它可以加速热图的可视化。


0

另一个需要考虑的事情是:

library(lattice)
levelplot(hclust(dist(m)))

这与使用“lattice”无关,而是与减少渲染时间有关。 - igauravsehrawat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接