在使用函数 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)
}
这里有一个全局分配,可能是也可能不是你需要的;大多数 <<-
和全局变量被认为是不好的做法,但有时它已经足够好了!
我正在使用 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)
}
这里有一个全局分配,可能是也可能不是你需要的;大多数 <<-
和全局变量被认为是不好的做法,但有时它已经足够好了!