在使用函数gimage(R package gWidgets)绘制的图像上添加一个点

时间:2017-02-11 16:43:46

标签: r gwidgets

我正在使用R包gWidgets。 我想在图片上添加一个点(.jpg)。

我的代码是:

require(jpeg)
require(gWidgets)

options(guiToolkit="RGtk2")
w <- gwindow("test")
gimage("yourpath.jpg",dirname="", container = w,toolkit=guiToolkit("RGtk2"))
da <- w@widget@widget 
callbackID <- gSignalConnect(da,"button-release-event", function 
(w,e,...) { 
# allocation <- w$GetAllocation() 
addHandlerClicked(da, handler = function(h,...) {
})
xclick <- e$GetX() 
yclick <- e$GetY() 
print(xclick)
print(yclick)
points(xclick, yclick) 
pressed <<- FALSE 
return(TRUE) 
})

警告:

plot.new has not been called yet

有人可以帮助我吗? 感谢

1 个答案:

答案 0 :(得分:0)

  

警告:

     

plot.new还没有被调用

嗯,这不是真的吗?在上面的代码中,没有创建绘图(使用plot()或类似的)。

同样在你的代码中我看不到你创建的地方&#34; yourpath.jpg&#34; - 据推测,这是你想要绘制的情节。

事实上,你似乎正在尝试混合图像和情节。如果你想要包含一个R图,你需要的是一个ggraphics。

这样的事情应该做你想要尝试和实现的目标:

library(gWidgets2)
options(guiToolkit="RGtk2")

# Generate some data
xdata<-rnorm(n=5)
ydata<-rnorm(n=5)

gTest<-function(){

#Plotting function
plotf<-function(...){
    plot(xdata,ydata)
}

# Function to add points
.addPoint<-function(h,...){
    points(h$x,h$y,col="red")
}

win <- gwindow("Test")
theplot<-ggraphics(cont=win)

addHandlerClicked(theplot,handler=.addPoint)

Sys.sleep(0.1) # Prevents error with "figure margins too large"

plotf()
}

gTest()

请注意,如上所述,新点(使用points())但未实际保存。你需要做,例如

.addPoint<-function(h,...){
    points(h$x,h$y,col="red")
    xdata<<-c(xdata,h$x)
    ydata<<-c(ydata,h$y)
}

这里有一个全球任务,可能是你需要的,也可能不是你需要的;大多数<<-和全局变量被认为是不好的做法,但有时它足够好!