当前位置 : 主页 > 网络安全 > 测试自动化 >

geom_raster()的相对性能

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有一个R / ggplot2用例似乎需要geom_raster:一个常规的笛卡尔网格,在x,y位置有z值.我一直在使用geom_tile,我期望通过切换到geom_raster来提高性能.但我似乎没有看到一个…… 这是一个玩具示
我有一个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
网友评论