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

Add a point on an image plotted with the function gimage (R package 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

有人可以帮助我吗? 谢谢

warning:

plot.new has not been called yet

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

此外,在您的代码中,我看不到您在哪里创建 "yourpath.jpg" - 大概是您要绘制的情节。

事实上,您似乎在尝试混合图像和情节。如果你想包括一个 R plot,你需要的是一个 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)
}

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