使用gWidgets2显示图形

时间:2013-12-09 18:41:54

标签: r gtk2 gwidgets

这是我的GUI“标题”:

library(gWidgets2RGtk2)
library(cairoDevice)
library(ggplot2)
WINGRAPH0 <- gwindow("")
WINGRAPH <- gvbox(container=WINGRAPH0)

以下代码不起作用:

gnb <- gnotebook(container=WINGRAPH)
ggraph <- ggraphics(container=gnb)
ggplot(cars, aes(x=speed, y=dist)) + geom_point()

它给出了:

Error in UseMethod("depth") : 
  no applicable method for 'depth' applied to an object of class "NULL"

但是,如果我首先在图形笔记本中显示图像文件,这样可以正常工作:

gnb <- gnotebook(container=WINGRAPH)
gimage("plot1.png", container=gnb)
ggraph <- ggraphics(container=gnb)
ggplot(cars, aes(x=speed, y=dist)) + geom_point()

在第一段代码中,如果我使用经典的情节而不是ggplot(例如plot(0,0)),我会得到:

Error in plot.new() : figure margins too large

我已经尝试了给this question的答案但是没有用。

1 个答案:

答案 0 :(得分:2)

在绘图之前将visible设置为FALSE:

library(gWidgets2RGtk2)
library(cairoDevice)

w <- gwindow("notebook example")
nb <- gnotebook(cont=w)
gg <- ggraphics(cont=nb, label='1',visible=FALSE)
library(ggplot2)
ggplot(cars, aes(x=speed, y=dist)) + geom_point()
visible(gg) <- TRUE

enter image description here

<强> EIDT

w <- gwindow("notebook example")
nb <- gnotebook(cont=w)
devs <- lapply(1:2, function(i) 
    ggraphics(cont=nb,visible=FALSE, label=as.character(i)))

addHandlerChanged(nb, handler=function(h,...) {
    gg <- h$obj[h$page.no]
    visible(gg) <- TRUE
    if(h$page.no =="1")
        print(ggplot(cars, aes(x=speed, y=dist)) + geom_point())
    else    plot(0)
})