2014-01-09 4 views
3

Я создаю небольшой графический интерфейс для анализа климата с использованием gWidgets в R. Progress был медленным, но устойчивым, пока не ударил проблему, пытаясь отобразить мой растровый стек результатов, используя spplot(). Проблема заключается в том, что только первый растр в стеке нанесен на график, а остальные нет. Эта проблема возникает независимо от того, если:R-spplot не строит растровый стек в gWidgets GUI

  1. Я создаю участок, используя обработчик в графическом интерфейсе.

  2. Если график произведен с использованием обработчика в пределах функции addHandlerChanged/addHandlerClicked.

  3. Если участок загружен в графический интерфейс непосредственно с консоли R.

  4. Как указано выше, используя используя levelplot().

Если plot() используются, отображаются результаты правильно, но первые 16 отображаются только (у меня есть 24 граф) и весы не слиты производить трудности в интерпретации результатов.

Вот несколько примеров кода, чтобы проиллюстрировать этот вопрос:

require(gWidgets) 
require(raster) 

## create example GUI plot area 
win = gwindow("Graph test") 
nb = gnotebook(container=win,expand=T) 
plots = ggraphicsnotebook(container=nb) 

## create raster stack 
rs=list() 
for(i in 1:24){ 
    rs1=raster() 
    rs1[]=rnorm(3600) 
    rs[i]=rs1 
} 
rs=stack(rs) 

## attempt to plot stack 
spplot(rs) ##plot is not produced correctly with only the first raster plotted 

##compare this to plotting in a normal window 
windows() 
spplot(rs) 


Вот пример ожидаемого участка (слева) и фактическое (справа), используя приведенный выше код.
Expected and actual results
Если у кого-нибудь есть идеи, как обойти это или любые альтернативные варианты построения растровых стеков, я хотел бы их услышать.

(обратите внимание, что аналогичные результаты получены, если открыть отдельное окно с помощью windows() внутри GUI или, если я использую levelplot())

Приветствия

+1

Получаете ли вы те же результаты, используя 'print (spplot (rs))'? –

+0

Спасибо. 'print (spplot (rs))' работает, если я вызываю новое окно с помощью 'windows()' внутри обработчика. Но на странице 'ggraphics()' она все еще не отображается правильно. На самом деле показ в окне будет –

+0

Возможно, это ошибка в 'cairoDevice': http://stackoverflow.com/questions/14281135/lattice-graphics-in-a-r-widget –

ответ

0

Для тех, кто может быть заинтересован. Через 3,5 лет и много испытаний, в том числе recordPlot(), в gridGraphics пакет и imager::capture.plot(), единственное решение, которое я нашел, чтобы сохранить график как изображение, а затем построить его в окне, используя rasterImage()

require(gWidgets) 
require(gWidgetsRGtk2) 
require(RGtk2) 
require(raster) 
require(png) 

options(guiToolkit="RGtk2") 

## create raster stack 
rs=list() 
for(i in 1:24){ 
    rs1=raster(nrow=2,ncol=2) 
    rs1[]=rnorm(4) 
    rs[i]=rs1 
} 
rs=stack(rs) 

##save plot as png 
png("out.png") 
spplot(rs) 
dev.off() 
img = readPNG("out.png") 


## create example GUI plot area 
win = gwindow("Graph test") 
nb = gnotebook(container=win,expand=T) 
plots = ggraphicsnotebook(container=nb) 

##plot 
par(mar=rep(0,4)) 
plot(1, type="n", axes=F, xlab="", ylab="") 
usr = par("usr")  
rasterImage(img, usr[1], usr[3], usr[2], usr[4]) 

enter image description here

+0

Спасибо за сообщение. – jverzani