locator equivalent in ggplot2 (for maps)

*Note: This question is specific for mapping but I'd like to be able to use it when I plot in a standard Cartesian coordinate system.* I love base graphics but also like ggplot2 for many things. One of my most used base functions for fine tuning a graph is locator(n) but this produces an error 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) Now `grid.locator()` as pointed out to me by Dason on talkstats.com ([HERE][1]) can return something. I just don't know how to use that something to get a map coordinate. > grid.locator() $x [1] 286native $y [1] 133native Units didn't seem to help as they are not map coordinates. Maybe I need some sort of conversion. Thank you in advance. **EDIT: (based on DWin's response)** Dwin's got the right idea but the conversion factor is a little bit off. Help with that would be appreciated. In the example below I have a map with a red dot on it at the coordinates (x = -73 & y = 40.855). I threw Dwin's response into a function to return the coordinates. I would expect the results to be the coordinates I put in but they're not. ***Ideas?*** 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: (Going off of Baptise's answer)** We're there 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:** ***The `gglocator` function of the [ggmap package][2] now contains this functionality.*** [1]: http://www.talkstats.com/showthread.php/23852-locator-equivalent-in-ggplot2 [2]: http://cran.r-project.org/web/packages/ggmap/ggmap.pdf
like due to changes in ggplot2, ggLocator from ggmap no longer works: github.com/dkahle/ggmap/issues/87

以上就是locator equivalent in ggplot2 (for maps)的详细内容,更多请关注web前端其它相关文章!

赞(0) 打赏
未经允许不得转载:web前端首页 » JavaScript 答疑

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏