R низкоэффективное построение графиков с pch=16 в 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, я не возвращаюсь к производительности, которую я имел до обновления всего.

Любая идея??

1 ответ

Решение

[Это отредактировано. Сначала сообщалось, что при первом способе не наблюдается замедления.]

Это на самом деле не ответ, а продолжение. Это странно. У меня есть три способа сделать это. Первый обходит gwidgets2:

win <- gtkWindow() gg <- gtkDrawingAreaNew() ps = 12 cairoDevice::asCairoDevice(gg, pointsize=ps) win$add(gg)

Этот второй гибрид в обход графики:

win <- gwindow() gg <- gtkDrawingAreaNew() ps <- 12 cairoDevice::asCairoDevice(gg, pointsize=ps) add(win, gg)

(гибрид gWidgets2 и cairoDevice)

и ваш оригинал

win <- gwindow() gg <- ggraphics(cont=win)

Сначала я сообщал, что первый подход сработал, как и ожидалось, но не последний 2. Теперь я вижу обратное. Последние два работают немного лучше, но все плохо работают на pch=16, 17 или 18.

Я думаю, что ваш комментарий о пакете cairoDevice, вероятно, уместен. Я протестировал вышеупомянутое с помощью Gtk, который устанавливался при появлении запроса после загрузки RGtk2. Я не уверен, как поступить. Есть и другие сообщения о проблемах с устройством ggraphics под окнами, все со мной намекают на аналогичный ответ. Надеюсь, это не смертельно для ваших планов.

(Я открыл проблему на GitHub: https://github.com/jverzani/gWidgets2RGtk2/issues/15 чтобы продолжить обсуждение, так как это не подходит для stackru.)

Другие вопросы по тегам