R语言数据探索:如何快速可视化大型矩阵?
快速可视化大矩阵的R解决方案
我太懂这种对比之后的挫败感了——Matlab里秒出的大矩阵可视化,到R里居然要等几分钟,换谁都急。先给你吃颗定心丸:你的操作完全没问题,只是默认的可视化函数对大矩阵的优化没跟上。下面给你几个超实用的快速方案,都是一两行代码就能搞定的:
1. 用stars包(最快首选)
stars是专门为多维栅格/矩阵数据设计的包,底层用C++做了优化,处理大矩阵的速度快到离谱,3000×3000的矩阵基本几秒就能出图:
library(stars) plot(st_as_stars(rand.matrix))
它直接把矩阵转换成栅格对象,不需要额外的数据格式转换,省去了melt这类耗时步骤,同时默认的配色和布局也很实用。
2. 用raster包
raster包也是处理栅格数据的老牌工具,同样不需要转换长格式,速度比image.plot快很多:
library(raster) plot(raster(rand.matrix))
如果需要自定义配色,直接加col参数就行,比如用流行的viridis配色:
plot(raster(rand.matrix), col = viridis::viridis(256))
3. 优化base R的image()函数
如果你不想装额外包,base R的image()本身比image.plot快不少——毕竟image.plot额外做了颜色条精细化渲染、边界调整等操作,拖慢了速度。试试这个:
image(rand.matrix, col = viridis::viridis(256))
虽然速度比前两个包稍慢,但胜在无需额外依赖,对于1000×1000的矩阵,应该能控制在几秒内完成。
为什么之前的方法慢?
image.plot()(来自fields包):它在绘制时会做很多额外计算,比如生成高精度的颜色条、调整图像边界,这些对小矩阵友好,但大矩阵会大幅增加耗时。ggplot2的melt+geom_raster():melt会把矩阵转换成百万级行数的长格式数据,这个转换过程本身就耗时,再加上geom_raster逐个渲染像素,自然慢得离谱。
内容的提问来源于stack exchange,提问作者R Greg Stacey
相关产品推荐
相关产品推荐

