我正在使用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
有人可以帮助我吗? 感谢
答案 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)
}
这里有一个全球任务,可能是你需要的,也可能不是你需要的;大多数<<-
和全局变量被认为是不好的做法,但有时它足够好!