簡體   English   中英

在使用功能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

有人可以幫我嗎? 謝謝

警告:

plot.new尚未被調用

好吧,是真的嗎? 在上面的代碼中,無處創建繪圖(使用plot()或類似方法)。

同樣在您的代碼中,我看不到您在哪里創建“ yourpath.jpg”-大概是您要繪制的圖。

實際上,您似乎正在嘗試將圖像和圖表混合在一起。 如果要包括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)
}

在這里進行全局分配,這可能是您可能需要的,也可能不是。 大多數<<-和全局變量都被認為是不好的做法,但有時就足夠了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM