Добавьте точку на изображение, нанесенное с помощью функции 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)
}
Здесь с глобальным назначением, это может или не может быть тем, что вам нужно; в основном <<-
и глобальные переменные считаются плохой практикой, но иногда это достаточно хорошо!