在 gWidgets2 中使用 pch=16 的 R 低性能绘图
R low performance plotting with pch=16 in gWidgets2
在 Windows 我最近将 R 从 3.1.2 更新到 3.2.2 并更新了我正在使用的所有包(包括 cairoDevice)。现在我观察到在 gWidgets2 下绘图显示出非常差的性能,尤其是对于 pch=16,17,18:
library(gWidgets2,gWidgets2RGtk2)
options(guiToolkit="RGtk2")
win <- gwindow("Plot a figure",expand=TRUE)
gg <- ggraphics(container=win,expand=TRUE)
a <- seq(0,100,0.1)
for (b in 1:20){
par(pch = b)
plot(c(0,100),c(0,100))
start_time <- Sys.time()
points(a,a)
end_time <- Sys.time()
print(paste("pch =",b,"time to plot:",end_time-start_time))
}
给出:
[1] "pch = 1 time to plot: 0.134000062942505"
[1] "pch = 2 time to plot: 0.0380001068115234"
[1] "pch = 3 time to plot: 0.0569999217987061"
[1] "pch = 4 time to plot: 0.0550000667572021"
[1] "pch = 5 time to plot: 0.0409998893737793"
[1] "pch = 6 time to plot: 0.0379998683929443"
[1] "pch = 7 time to plot: 0.0859999656677246"
[1] "pch = 8 time to plot: 0.10699987411499"
[1] "pch = 9 time to plot: 0.0929999351501465"
[1] "pch = 10 time to plot: 0.180000066757202"
[1] "pch = 11 time to plot: 0.0740001201629639"
[1] "pch = 12 time to plot: 0.0859999656677246"
[1] "pch = 13 time to plot: 0.184999942779541"
[1] "pch = 14 time to plot: 0.062999963760376"
[1] "pch = 15 time to plot: 0.871000051498413"
[1] "pch = 16 time to plot: 49.2030000686646"
[1] "pch = 17 time to plot: 17.3880000114441"
[1] "pch = 18 time to plot: 24.2620000839233"
[1] "pch = 19 time to plot: 0.174000024795532"
[1] "pch = 20 time to plot: 0.128999948501587"
没有 gWidgets2,数字远低于 0.1 秒。这种效果是可重现的。我的同事也有同感。
肯定和我更新的包有关。因为当我删除 R 3.2.2 并安装 3.1.2 时,我没有恢复到更新所有内容之前的性能。
有什么想法吗??
[已编辑。起初它报告说第一种方法没有减速。]
这不是一个真正的答案,而是一个跟进。这很奇怪。我有三种方法可以做到这一点。第一种绕过gwidgets2:
win <- gtkWindow()
gg <- gtkDrawingAreaNew()
ps = 12
cairoDevice::asCairoDevice(gg, pointsize=ps)
win$add(gg)
第二个是绕过 ggraphics 的混合:
win <- gwindow()
gg <- gtkDrawingAreaNew()
ps <- 12
cairoDevice::asCairoDevice(gg, pointsize=ps)
add(win, gg)
(gWidgets2 和 cairoDevice 的混合体)
和你原来的
win <- gwindow()
gg <- ggraphics(cont=win)
起初我报告第一种方法按预期工作,但后一种方法没有。现在我看到相反的情况。后两者表现稍好一些,但在 pch=16、17 或 18 上都表现不佳。
我认为您对 cairoDevice 包的评论很恰当。我使用加载 RGtk2 后出现提示时安装的 Gtk 测试了上述内容。我不确定如何进行。 windows 下的 ggraphics 设备还有其他报告的问题,我都提出了类似的答案。希望这不会对您的计划造成致命影响。
(我在 GitHub 上开了一个问题:https://github.com/jverzani/gWidgets2RGtk2/issues/15 继续讨论,因为这不适合 Whosebug。)
在 Windows 我最近将 R 从 3.1.2 更新到 3.2.2 并更新了我正在使用的所有包(包括 cairoDevice)。现在我观察到在 gWidgets2 下绘图显示出非常差的性能,尤其是对于 pch=16,17,18:
library(gWidgets2,gWidgets2RGtk2)
options(guiToolkit="RGtk2")
win <- gwindow("Plot a figure",expand=TRUE)
gg <- ggraphics(container=win,expand=TRUE)
a <- seq(0,100,0.1)
for (b in 1:20){
par(pch = b)
plot(c(0,100),c(0,100))
start_time <- Sys.time()
points(a,a)
end_time <- Sys.time()
print(paste("pch =",b,"time to plot:",end_time-start_time))
}
给出:
[1] "pch = 1 time to plot: 0.134000062942505"
[1] "pch = 2 time to plot: 0.0380001068115234"
[1] "pch = 3 time to plot: 0.0569999217987061"
[1] "pch = 4 time to plot: 0.0550000667572021"
[1] "pch = 5 time to plot: 0.0409998893737793"
[1] "pch = 6 time to plot: 0.0379998683929443"
[1] "pch = 7 time to plot: 0.0859999656677246"
[1] "pch = 8 time to plot: 0.10699987411499"
[1] "pch = 9 time to plot: 0.0929999351501465"
[1] "pch = 10 time to plot: 0.180000066757202"
[1] "pch = 11 time to plot: 0.0740001201629639"
[1] "pch = 12 time to plot: 0.0859999656677246"
[1] "pch = 13 time to plot: 0.184999942779541"
[1] "pch = 14 time to plot: 0.062999963760376"
[1] "pch = 15 time to plot: 0.871000051498413"
[1] "pch = 16 time to plot: 49.2030000686646"
[1] "pch = 17 time to plot: 17.3880000114441"
[1] "pch = 18 time to plot: 24.2620000839233"
[1] "pch = 19 time to plot: 0.174000024795532"
[1] "pch = 20 time to plot: 0.128999948501587"
没有 gWidgets2,数字远低于 0.1 秒。这种效果是可重现的。我的同事也有同感。
肯定和我更新的包有关。因为当我删除 R 3.2.2 并安装 3.1.2 时,我没有恢复到更新所有内容之前的性能。
有什么想法吗??
[已编辑。起初它报告说第一种方法没有减速。]
这不是一个真正的答案,而是一个跟进。这很奇怪。我有三种方法可以做到这一点。第一种绕过gwidgets2:
win <- gtkWindow()
gg <- gtkDrawingAreaNew()
ps = 12
cairoDevice::asCairoDevice(gg, pointsize=ps)
win$add(gg)
第二个是绕过 ggraphics 的混合:
win <- gwindow()
gg <- gtkDrawingAreaNew()
ps <- 12
cairoDevice::asCairoDevice(gg, pointsize=ps)
add(win, gg)
(gWidgets2 和 cairoDevice 的混合体)
和你原来的
win <- gwindow()
gg <- ggraphics(cont=win)
起初我报告第一种方法按预期工作,但后一种方法没有。现在我看到相反的情况。后两者表现稍好一些,但在 pch=16、17 或 18 上都表现不佳。
我认为您对 cairoDevice 包的评论很恰当。我使用加载 RGtk2 后出现提示时安装的 Gtk 测试了上述内容。我不确定如何进行。 windows 下的 ggraphics 设备还有其他报告的问题,我都提出了类似的答案。希望这不会对您的计划造成致命影响。
(我在 GitHub 上开了一个问题:https://github.com/jverzani/gWidgets2RGtk2/issues/15 继续讨论,因为这不适合 Whosebug。)