Гвиджеты в R на Windows

Разрабатывая интерфейс gWidgets для отображения данных и результатов модели, я создаю страницу графика и par(mfrow=c(4,1)) положить 4 участка сложены.

Первый график (простой y против x вверху) работает нормально, но остальные 3 графика в цикле создают оси, но не отображают данные. Чтобы проверить код, я попытался открыть новое окно графика, прежде чем просматривать циклы, и все работало нормально.

Есть ли что-то в gwdigets взаимодействие с plot(...) что было бы полезно узнать?

РЕДАКТИРОВАТЬ воспроизводимый пример:

не работает:

library(gWidgets)
options(guiToolkit="RGtk2") ## "Qt"
w <- gwindow("brush example", visible=FALSE)
g <- ggroup(container=w)
gg <- ggraphics(container=g)

addHandlerChanged(gg, handler=function(h,...) {
  par(mfrow=c(2,2))
  plot(mpg ~ wt, mtcars)
  plot(mpg ~ wt, mtcars,col='blue')
  plot(mpg ~ wt, mtcars,col='red')
  plot(mpg ~ wt, mtcars,col='green')
})
visible(w) <- TRUE

должно выглядеть так (обычное графическое окно R:

Не так

2 ответа

Есть два вопроса. Один из них может быть связан с реализацией cairo в Windows. Это можно проверить, вообще избегая gWidgets:

make_plot <- function() {
  par(mfrow=c(2,2))
  plot(mpg ~ wt, mtcars)
  plot(mpg ~ wt, mtcars,col='blue')
  plot(mpg ~ wt, mtcars,col='red')
  plot(mpg ~ wt, mtcars,col='green')
}

require(RGtk2)
require(cairoDevice)

w <- gtkWindow(show=FALSE)
da <- gtkDrawingArea()
w$add(da)
w$show(TRUE)

asCairoDevice(da)

make_plot()

Другая проблема заключается в том, чтобы поместить вызов рисования графики в обработчик. Для ggraphics обработчик изменений вызывается после того, как заканчивается резиновая полоса, а не когда меняется сама графика. Не уверен, что это самая полезная вещь, но он предназначен для вызова какого-либо обработчика после того, как выбор сделан с помощью резиновой ленты. AddHandlerClicked может быть более интересным.

По некоторым причинам сюжет не может быть обновлен. Вы можете использовать несколько экземпляров ggraphics или использовать ggraphicsnotebook,

Здесь решение с использованием многих случаев ggraphics,

library(gWidgets)
options(guiToolkit="RGtk2") ## "Qt"
w <- gwindow("brush example", visible=FALSE)
gg <- ggroup(container=w,horizontal=F,use.scrollwindow = T)
down.group <- ggroup(container = gg)
up.group <- ggroup(container = gg)

devs.up <- lapply(1:2, function(i) 
                 ggraphics(container=down.group,label=as.character(i)))
devs.down <- lapply(3:4, function(i) 
                 ggraphics(container=up.group,label=as.character(i)))
visible(w) <- TRUE
lapply(c(devs.up,devs.down), function(gg)
addHandlerChanged(gg, handler=function(h,...) {
  par(mfrow=c(1,1))
  plot(mpg ~ wt, mtcars)
}))
Другие вопросы по тегам