我有一个R / ggplot2用例似乎需要geom_raster:一个常规的笛卡尔网格,在x,y位置有z值.我一直在使用geom_tile,我期望通过切换到geom_raster来提高性能.但我似乎没有看到一个…… 这是一个玩具示
这是一个玩具示例(但大小合适),使用基本图形:
n <- m <- 200 x <- 1:n y <- 1:m f <- function(x, y) 10 * sin(x / n) * cos(y / m) z <- outer(x, y, f) system.time(image(z)) user system elapsed 0.998 0.007 1.023
这是与ggplot2:
obs <- expand.grid(x=x, y=y) obs$z <- as.numeric(as.list(z)) require(ggplot2) p <- ggplot(obs, aes(x=x, y=y, fill=z)) system.time(show(p + geom_tile())) user system elapsed 7.328 0.891 8.187 require(ggExtra) system.time(show(p + geom_raster())) user system elapsed 7.000 0.637 7.799
所以,适度增长,但远不及我的期望.我做错了吗?提前谢谢了!
你应该使用最新的ggplot2(目前是 dev version)中的geom_raster,而不是ggExtra中的buggy原型(这个软件包现已弃用,顺便说一下).这样做,我得到了更好的结果,4.705对1.416(已过去).相当不错.
编辑:事实证明,ggplot2中的?geom_raster已经在我的系统上提供了更好的基准测试
benchplot(base + geom_raster()) step user.self sys.self elapsed 1 construct 0.006 0.004 0.010 2 build 0.887 0.212 1.109 3 render 0.449 0.119 0.584 4 draw 0.108 0.005 0.141 5 TOTAL 1.450 0.340 1.844 > benchplot(base + geom_tile()) step user.self sys.self elapsed 1 construct 0.016 0.005 0.026 2 build 1.031 0.329 1.365 3 render 1.021 0.297 1.318 4 draw 0.987 0.041 1.040 5 TOTAL 3.055 0.672 3.749