Добавьте точку на изображение, нанесенное с помощью функции gimage (пакет R 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

Может ли кто-нибудь помочь мне? Спасибо

1 ответ

Решение

предупреждение:

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

Здесь с глобальным назначением, это может или не может быть тем, что вам нужно; в основном <<- и глобальные переменные считаются плохой практикой, но иногда это достаточно хорошо!

Другие вопросы по тегам