2017-02-11 37 views
0

我正在使用R包gWidgets。 我想在圖片上添加一個點(.jpg)。在用gimage函數繪製的圖像上添加點(R包gWidgets)

我的代碼是:

require(jpeg) 
require(gWidgets) 

options(guiToolkit="RGtk2") 
w <- gwindow("test") 
gimage("yourpath.jpg",dirname="", container = w,toolkit=guiToolkit("RGtk2")) 
da <- [email protected]@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

警告:

plot.new還沒有被稱爲尚未

嗯,這是真的,不是嗎?在上面的代碼中,無處創建了一個圖(使用plot()或類似的圖)。

同樣在你的代碼中,我看不到你在哪裏創建「yourpath.jpg」 - 大概是你試圖繪製的情節。

實際上,您似乎在嘗試混合圖像和情節。如果你想包含一個R圖,你需要的是一個圖形。

類似的東西應該做你似乎什麼嘗試和實現:

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) 
} 

這裏有一個全局的任務,可能或可能不是你所需要的;主要是<<-和全局變量被認爲是不好的做法,但有時它已經足夠好了!