Nota: questa domanda è specifica per la mappatura ma mi piacerebbe essere in grado di usarla quando ordino in un sistema di coordinate cartesiane standard.locator equivalente in ggplot2 (per le mappe)
Amo la grafica di base ma mi piace anche ggplot2 per molte cose. Una delle mie funzioni di base più utilizzate per la regolazione fine di un grafico è il locator (n), ma questo produce un errore in ggplot2.
library(ggplot2)
county_df <- map_data('county') #mappings of counties by state
ny <- subset(county_df, region=="new york") #subset just for NYS
ny$county <- ny$subregion
ggplot(ny, aes(long, lat, group=group)) + geom_polygon(colour='black', fill=NA)
locator(1)
Ora grid.locator()
come mi ha fatto notare da Dason su talkstats.com (HERE) può restituire qualcosa. Non so come usare quel qualcosa per ottenere una coordinata della mappa.
> grid.locator()
$x
[1] 286native
$y
[1] 133native
Le unità non sembrano aiutare in quanto non sono le coordinate della mappa. Forse ho bisogno di una sorta di conversione.
Grazie in anticipo.
EDIT: (in base alla risposta del DWin)
Dwin del avuto l'idea giusta, ma il fattore di conversione è un po 'fuori. Aiutare con quello sarebbe apprezzato. Nell'esempio seguente ho una mappa con un punto rosso su di essa alle coordinate (x = -73 & y = 40.855). Ho lanciato la risposta di Dwin in una funzione per restituire le coordinate. Mi aspetto che i risultati siano le coordinate che ho inserito, ma non lo sono.
Idee?
require(maps); library(ggplot2); require(grid)
county_df <- map_data('county') #mappings of counties by state
ny <- subset(county_df, region=="new york") #subset just for NYS
ny$county <- ny$subregion
NY <- ggplot(ny, aes(long, lat)) +
geom_polygon(aes(group=group), colour='black', fill=NA) +
coord_map() + geom_point(aes(-73, 40.855, colour="red"))
NY
gglocator <- function(object){
require(maps); require(grid)
z <- grid.locator("npc")
y <- sapply(z, function(x) as.numeric(substring(x, 1, nchar(x))))
locatedX <- min(object$data$long) + y[1]*diff(range(object$data$long))
locatedy <- min(object$data$lat) + y[2]*diff(range(object$data$lat))
return(c(locatedX, locatedy))
}
#click on the red dot
gglocator(NY) #I expect the results to be x = -73 & y = 40.855
EDIT 2: (Andando fuori della risposta di Baptise)
siamo lì
NY <- ggplot(ny, aes(long, lat)) +
geom_polygon(aes(group=group), colour='black', fill=NA) +
coord_map() + geom_point(aes(-73, 40.855, colour="red")) +
scale_x_continuous(expand=c(0,0)) + scale_y_continuous(expand=c(0,0))
NY
x <- grid.ls()[[1]][grep("panel-", grid.ls()[[1]])] #locate the panel
seekViewport(x)
y <- grid.locator("npc")
y <- as.numeric(substring(y, 1, nchar(y)-3))
locatedX <- min(NY$data$long) + y[1]*diff(range(NY$data$long))
locatedy <- min(NY$data$lat) + y[2]*diff(range(NY$data$lat))
locatedX; locatedy
UPDATE:La funzione gglocator
del ggmap package ora contiene questa funzionalità
come causa di cambiamenti nella ggplot2, ggLocator da ggmap non funziona più: https://github.com/dkahle/ggmap/issues/87 –