R中的数据探索:快速显示大矩阵的热图?

时间:2018-05-16 23:27:29

标签: r matlab matrix visualization data-visualization

如何在R中快速显示大型矩阵?

我有时使用大型数字矩阵(例如3000 x 3000),并且快速可视化它们是一个非常有用的质量控制步骤。这在我以前选择的语言Matlab中非常简单快捷。例如,显示1000x1000矩阵需要0.5秒:

rand_matrix = rand(1000,1000);
tic
imagesc(rand_matrix)
toc
>> Elapsed time is 0.463903 seconds.

我喜欢R中相同的权力,但遗憾的是可视化矩阵在R 中似乎非常慢。例如,使用image.plot()相同的随机矩阵需要超过10秒才能显示:

require(tictoc)
require(image.plot)
mm = 1000
nn = 1000
rand.matrix = matrix(runif(mm*nn), ncol=mm, nrow=nn)
tic("Visualizing matrix")
image.plot(rand.matrix)
toc()
> Visualizing matrix: 11.744 sec elapsed

随着矩阵越来越大,问题越来越严重。例如,与Matlab中的秒数相比,3000x3000矩阵在R中可视化需要几分钟。这显然不适用于数据探索。我尝试过ggplot,而熔化+ geom_raster()仍然需要一分钟。

我做错了什么?有没有一种可视化R中矩阵的快速方法?理想的解决方案需要一两行。

1 个答案:

答案 0 :(得分:5)

使用image(m, useRaster = TRUE)时,我很快得到了一个情节:

start = Sys.time()
image(rand.matrix, useRaster = TRUE)
print(Sys.time() - start)
# Time difference of 0.326 secs

如果没有useRaster = TRUE这需要1.5秒,useRaster会加快速度,但我认为这只适用于简单,均匀间隔的点。

如果你的最终目标是用这个图生成一个图像文件,那么我认为直接输出像png这样的栅格格式可能是最有效的,尽管测量R需要多长时间来保存它有点棘手图像文件,例如:

png("image_plot.png", width = 1000, height = 1000)
image(rand.matrix, useRaster = TRUE)
dev.off()