Гвиджеты в 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)
}))