Примечание. Этот вопрос специфичен для картографирования, но я хотел бы использовать его, когда строю график в стандартной декартовой системе координат.
Я люблю базовую графику, но такжекак ggplot2 для многих вещей.Одна из моих наиболее часто используемых базовых функций для тонкой настройки графа - это locator (n), но это приводит к ошибке в 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)
Теперь grid.locator()
, как указал мне Dason на talkstats.com ( ЗДЕСЬ ) может что-то вернуть.Я просто не знаю, как использовать это что-то для получения координат карты.
> grid.locator()
$x
[1] 286native
$y
[1] 133native
Единицы, похоже, не помогли, так как они не являются координатами карты.Может быть, мне нужно какое-то обращение.
Заранее спасибо.
РЕДАКТИРОВАТЬ: (основываясь на ответе DWin)
У Двина правильная идея, но коэффициент преобразования немноговыкл.Помощь с этим будет оценена.В приведенном ниже примере у меня есть карта с красной точкой в координатах (x = -73 & y = 40.855).Я бросил ответ Двина в функцию, чтобы вернуть координаты.Я ожидал бы, что результаты будут координатами, которые я ввел, но это не так.
Идеи?
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
РЕДАКТИРОВАТЬ 2: (Исходя из ответа Крещения)
Мы там
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
ОБНОВЛЕНИЕ: gglocator
функция пакета ggmap теперь содержит эту функцию.