我正在使用R包ggmap.
?get_map 说:
location:地址,经度/纬度对(按此顺序),或左/下/右/顶部边界框
我的代码:
library(ggmap)
library(mapproj)
lat_bottom = 52.33 # bottom latitude of Berlin
lat_top = 52.5 # top latitude of Berlin
lon_left = 13.0 # left longitude of Berlin
lon_rigth = 13.95 # right longitude of Berlin
mymap <- get_map(location = c(lon_left,lat_bottom,lon_rigth,lat_top),
source="google")
ggmap(mymap)
Run Code Online (Sandbox Code Playgroud)
为什么它会给我一个警告:
警告:给谷歌的边界框 - 空间范围只是近似值.将边界框转换为中心/缩放规范.(实验)
这是否意味着我无法创建具有这些精确角落的地图?
根据以下建议我尝试了这个:
lat_bottom = 52.33 # bottom latitude of Berlin
lat_top = 52.68 # top latitude of Berlin
lon_left = 13.08 # left longitude of Berlin
lon_rigth = 13.77 # …Run Code Online (Sandbox Code Playgroud) 一段时间后我再次开始使用该包ggmap,现在当我尝试使用 function 获取地图时遇到问题get_map。无论我指定哪个来源,我总是收到错误
Error: Google now requires an API key.
See ?register_google for details.
Run Code Online (Sandbox Code Playgroud)
虽然我不知道为什么这样的电话
get_map(location = "texas", zoom = 6, source = "stamen")
Run Code Online (Sandbox Code Playgroud)
需要对谷歌进行 API 调用。有没有人经历过类似的事情并且有已知的解决方法吗?
我正在尝试使用ggmap中的route()函数映射路由.我的问题是这条路线不会留在路上.有什么东西我的route_df <- route(origin, destination, structure = "route")代码丢失了吗?或者是否有可用于实现此目的的替代功能?
示例代码:
install_github("rstudio/leaflet")
library(ggmap)
library(leaflet)
way1txt <- "Tinsletown, Vancouver, BC"
way2txt <- "Science World, Vancouver, BC"
route_df <- route(way1txt, way2txt, structure = "route")
# Map using Leaflet R
m = leaflet() %>% addTiles()
m = m %>% addPolylines(route_df$lon, route_df$lat, fill = FALSE)
m = m %>% addPopups(route_df$lon[1], route_df$lat[1], 'Origin')
m = m %>% addPopups(route_df$lon[length(route_df$lon)],
route_df$lat[length(route_df$lon)], 'Destination')
m
Run Code Online (Sandbox Code Playgroud)
地图截图:

我试图ggmap通过学校来看待教育成绩.我创建了所有学校的坐标列表和个别学生的分数如下:
score lat lon
3205 45 28.04096 -82.54980
8275 60 27.32163 -80.37673
4645 38 27.45734 -82.52599
8962 98 26.54113 -81.84399
9199 98 27.88948 -82.31770
340 53 26.36528 -81.79639
Run Code Online (Sandbox Code Playgroud)
我首先使用了我参与的大多数教程中的模式:http : //journal.r-project.org/archive/2013-1/kahle-wickham.pdf http://www.geo.ut.ee/ AASA/LOOM02331/heatmap_in_R.html
library(ggmap)
library(RColorBrewer)
MyMap <- get_map(location = "Orlando, FL",
source = "google", maptype = "roadmap", crop = FALSE, zoom = 7)
YlOrBr <- c("#FFFFD4", "#FED98E", "#FE9929", "#D95F0E", "#993404")
ggmap(MyMap) +
stat_density2d(data = s_rit, aes(x = lon, y = lat, fill = ..level.., alpha = ..level..), …Run Code Online (Sandbox Code Playgroud) 我有一个ggplot地图,例如:
library(ggmap)
ggmap(get_map())
Run Code Online (Sandbox Code Playgroud)
我希望轴标签自动标记为NS/WE:在上述情况下,例如,它应该显示95.4°E而不是lon -95.4.
我试图弄乱scales包和使用scale_x_continuous和scale_y_continuous标签和打破选项,但我没有设法让它工作.
拥有一个scale_y_latitude和那将是非常棒的scale_x_longitude.
编辑:感谢@Jaap的回答,我得到了以下内容:
scale_x_longitude <- function(xmin=-180, xmax=180, step=1, ...) {
ewbrks <- seq(xmin,xmax,step)
ewlbls <- unlist(lapply(ewbrks, function(x) ifelse(x < 0, paste(x, "W"), ifelse(x > 0, paste(x, "E"),x))))
return(scale_x_continuous("Longitude", breaks = ewbrks, labels = ewlbls, expand = c(0, 0), ...))
}
scale_y_latitude <- function(ymin=-90, ymax=90, step=0.5, ...) {
nsbrks <- seq(ymin,ymax,step)
nslbls <- unlist(lapply(nsbrks, function(x) ifelse(x < 0, paste(x, "S"), ifelse(x > 0, paste(x, "N"),x))))
return(scale_y_continuous("Latitude", …Run Code Online (Sandbox Code Playgroud) 我试图显示给定位置的各个点,就像相当于点图的地图。我尝试使用leafletR 中的库,但我只能将标记的大小映射到连续变量。是否可以将各个数据点映射为簇,而不是将标记的大小映射到连续变量?
我的数据看起来像这样
Lat,Lon,Place,People
19.877263,75.3390241,Aurangabad,1
20.2602939,85.8394548,Bhubaneshwar,2
30.7194022,76.7646552,Chandigarh,23
13.0801721,80.2838331,Chennai,25
11.0018115,76.9628425,Coimbatore,2
27.4844597,94.9019447,Dibrugarh,1
16.2915189,80.4541588,Guntur,1
17.3887859,78.4610647,Hyderabad,4
22.5677459,88.3476023,Kolkata,7
15.8309251,78.0425373,Kurnool,1
9.9256493,78.1228866,Madurai,1
Run Code Online (Sandbox Code Playgroud) library(sp)
library(spdep)
library(ggplot2)
library(ggmap)
library(rgdal)
Run Code Online (Sandbox Code Playgroud)
获取并摆弄数据:
nc.sids <- readShapePoly(system.file("etc/shapes/sids.shp", package="spdep")[1],ID="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66"))
nc.sids=spTransform(nc.sids,CRS("+init=epsg:4326"))
Run Code Online (Sandbox Code Playgroud)
从stamen.com获取背景地图,情节,看起来不错:
ncmap = get_map(location=as.vector(bbox(nc.sids)),source="stamen",maptype="toner",zoom=7)
ggmap(ncmap)
Run Code Online (Sandbox Code Playgroud)
在地图上创建一个包含长,纬度,Z和绘图的数据框和一个空白图:
ncP = data.frame(coordinates(nc.sids),runif(nrow(nc.sids)))
colnames(ncP)=c("long","lat","Z")
ggmap(ncmap)+geom_point(aes(x=long,y=lat,col=Z),data=ncP)
ggplot()+geom_point(aes(x=long,y=lat,col=Z),data=ncP)
Run Code Online (Sandbox Code Playgroud)
给它一些叫做'id'和强化的独特的id(用维生素和铁?)
nc.sids@data[,1]=1:nrow(nc.sids)
names(nc.sids)[1]="id"
ncFort = fortify(nc.sids)
Run Code Online (Sandbox Code Playgroud)
现在,我的地图和我的极限,我想绘制74出生率:
myMap = geom_map(aes(fill=BIR74,map_id=id),map=ncFort,data=nc.sids@data)
Limits = expand_limits(x=ncFort$long,y=ncFort$lat)
Run Code Online (Sandbox Code Playgroud)
在一个空白的情节我可以:
ggplot() + myMap + Limits
Run Code Online (Sandbox Code Playgroud)
但在ggmap上我不能:
ggmap(ncmap) + myMap + Limits
# Error in eval(expr, envir, enclos) : object 'lon' not found
Run Code Online (Sandbox Code Playgroud)
一些版本:
> packageDescription("ggplot2")$Version
[1] "0.9.0"
> packageDescription("ggmap")$Version
[1] "2.0"
Run Code Online (Sandbox Code Playgroud)
我可以将geom_polygon添加到ggplot或ggmap,它可以按预期工作.所以geom_map就好了....
我们假设我使用ggmap包生成伦敦地图:
library(ggmap)
library(mapproj)
map <- get_map(location = "London", zoom = 11, maptype = "satellite")
p <- ggmap(map)+
theme(legend.position = "none")
print(p)
Run Code Online (Sandbox Code Playgroud)
现在我想在这个图中添加一个带有一些中心坐标的圆(比方说:lon = -0.1,lat = 52.23)和半径,例如以公里为单位.我尝试使用类似问题的解决方案(用ggplot2绘制一个圆圈),你可以在这里添加一个这样的语句:
p <- p + annotate("path",
x = xc+r*cos(seq(0,2*pi,length.out=100)),
y = yc+r*sin(seq(0,2*pi,length.out=100)))
Run Code Online (Sandbox Code Playgroud)
它有效,但由于规模不同,圆圈实际上不是圆形.是否可以正确绘制它?任何帮助,将不胜感激!
编辑:我找到了使用不同包的解决方案(https://gis.stackexchange.com/questions/119736/ggmap-create-circle-symbol-where-radius-represents-distance-miles-or-km),输出结果是正确.不过,如果有人知道如何使用ggmap,请分享它.
我正在用ggmap做相对简单的事情并且很困惑,因为在我的Mac上运行良好的代码不能在我的PC上运行.
我运行这段代码:
library(ggmap)
map <- get_map(location = c(-122.175, 37.45635),
maptype = "terrain",
source = "google",
crop = FALSE,
zoom = 7)
ggmap(map)
Run Code Online (Sandbox Code Playgroud)
,在我的Mac上运行正常,但在我的电脑上抛出此错误:
as.vector(y)出错:尝试应用非函数
任何帮助将非常感激.
我想使用类似ggplot2并ggmap以产生任意值的热图,如每平方米楼价在街道水平,以在地理区域(高分辨率).
不幸的是,这项任务似乎相当困难,因为虽然ggplot2可以产生一个很大的密度图,但似乎无法在没有事先插值的情况下将这样的空间数据可视化.
为此,我使用了库akima(不规则数据的网格双变量插值)和mgcv(带有积分平滑度估计的广义加性模型),但是我对插值方法的了解最多也是平庸的,而且我能够产生的结果不是足够令人满意
请考虑以下示例:
library(ggplot2)
library(ggmap)
## data simulation
set.seed(1945)
df <- tibble(x = rnorm(500, -0.7406, 0.03),
y = rnorm(500, 51.9976, 0.03),
z = abs(rnorm(500, 2000, 1000)))
Run Code Online (Sandbox Code Playgroud)
## ggmap
map <- get_map("Bletchley Park, Bletchley, Milton Keynes", zoom = 13, source = "stamen", maptype = "toner-background")
q <- ggmap(map, extent = "device", darken = .5)
## scatterplot over map
q + geom_point(aes(x, y), data = …Run Code Online (Sandbox Code Playgroud) ggmap ×10
r ×10
ggplot2 ×6
axis-labels ×1
geospatial ×1
google-maps ×1
leaflet ×1
map ×1
maps ×1
r-leaflet ×1