gpt4 book ai didi

R- spplot 不在 gWidgets GUI 中绘制栅格堆栈

转载 作者:行者123 更新时间:2023-12-02 04:56:49 26 4
gpt4 key购买 nike

我一直在使用 R 中的 gWidgets 构建一个用于气候分析的小型 GUI。进展缓慢但稳定,直到我在尝试使用 spplot() 显示我的栅格结果堆栈时遇到问题。问题是只绘制了堆栈中的第一个栅格,而其余的则没有。无论是否出现此问题:

  1. 我使用 GUI 中的处理程序生成绘图。

  2. 如果绘图是使用 addHandlerChanged/addHandlerClicked 函数中的处理程序生成的。

  3. 如果绘图直接从 R 控制台加载到 GUI。

  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
如果有人有任何想法如何解决这个问题或光栅堆栈的任何替代绘图选项,我很乐意听取他们的意见。

(请注意,如果我在 GUI 中使用 windows() 打开一个单独的窗口,或者如果我使用 levelplot(),则会产生类似的结果)

干杯

最佳答案

对于那些可能感兴趣的人。经过 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

关于R- spplot 不在 gWidgets GUI 中绘制栅格堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com