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就好了....
我试图反转地理编码一个大型数据集(大约100k).我使用revgeocode了包中的功能ggmap.我得到了一个条目的结果
48 Grand View Terrace, San Francisco,
CA 94114, USA
48 Grand View Terrace Eureka Valley San Francisco
San Francisco County California United States
postal_code postal_code_suffix
Run Code Online (Sandbox Code Playgroud)
,但我需要自动化该过程并将其用于整个数据集.
我试过了
r <- lapply(revgeocode(location = (c(z$lon),c(z$lat)),
output = "more",
messaging = FALSE, sensor = FALSE, override_limit = FALSE,
client = "", signature = ""))
Run Code Online (Sandbox Code Playgroud)
并在每一步中得到意外','的错误.
我也尝试编写以下循环
r <- for(i in 1:10){
revgeocode(location = ("z$lon", "z$lat"),output = "more", messaging = FALSE, sensor = FALSE, override_limit = FALSE,client = "", signature …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
library(ggmap)
ggmap(get_map(location=c(lon = 5.218922, lat = 52.342366), zoom =14))
Run Code Online (Sandbox Code Playgroud)
哪个由我的帐户应该工作正常,但我只得到一个标准的ggplot2图像(灰色背景等),正确的轴,但没有显示地图:

当我查看我的工作目录时,我找到一个名为"ggmapTemp"的文件,其中包含正确的地图.但是ggplot2没有显示地图.
我与RStudio合作,对我的工作电脑拥有有限的权利.这可能是地图显示不正确的原因吗?我的RStudio版本是0.96.316,R是R-2.15.1.
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=Dutch_Netherlands.1252 LC_CTYPE=Dutch_Netherlands.1252
[3] LC_MONETARY=Dutch_Netherlands.1252 LC_NUMERIC=C
[5] LC_TIME=Dutch_Netherlands.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggmap_2.1 ggplot2_0.9.1
loaded via a namespace (and not attached):
[1] colorspace_1.1-1 dichromat_1.2-4 digest_0.5.2 grid_2.15.1
[5] labeling_0.1 MASS_7.3-18 memoise_0.1 munsell_0.3
[9] plyr_1.7.1 png_0.1-4 proto_0.3-9.2 RColorBrewer_1.0-5
[13] reshape2_1.2.1 RgoogleMaps_1.2.0 rjson_0.2.9 scales_0.2.1
[17] stringr_0.6 tools_2.15.1
Run Code Online (Sandbox Code Playgroud)
更新: 我的sessionInfo()回答1后: …
我试图通过使用ggmap库中的revgeodcode函数来获取经度纬度坐标(长)列表的Zip代码.
我的问题和数据与此处相同:在FOR循环中使用revgeocode函数.需要帮助,但接受的答案对我不起作用.
我的数据(.csv):
ID, Longitude, Latitude
311175, 41.298437, -72.929179
292058, 41.936943, -87.669838
12979, 37.580956, -77.471439
Run Code Online (Sandbox Code Playgroud)
我按照相同的步骤:
data <- read.csv(file.choose())
dset <- as.data.frame(data[,2:3])
location = dset
locaddr <- lapply(seq(nrow(location)), function(i){
revgeocode(location[i,],
output = c("address"),
messaging = FALSE,
sensor = FALSE,
override_limit = FALSE)
})
Run Code Online (Sandbox Code Playgroud)
...并收到错误消息:"错误:is.numeric(位置)&&长度(位置)== 2不为TRUE"具体来说,is.numeric(位置)为FALSE,这看起来很奇怪,因为我可以乘以2并得到预期的答案.
任何帮助,将不胜感激.
我想创建一个不完全正方形但是矩形的地图,这是我指定的大小.
require(ggmap)
tenmile <- get_map(location = c(lon = -122.486328, lat = 48.862813),
color = "color",
source = "google",
maptype = "roadmap",
zoom = 12)
tenmile.map <- ggmap(tenmile,
extent = "device",
ylab = "Latitude",
xlab = "Longitude")+ggtitle("GEOMean for Data from Oct 2013-Nov 2014")
tenmile.map + geom_point(data=pp, aes(x=lon, y=lat, size=geomean), color="red", alpha=0.5) +
geom_text(data=pp, aes(x=lon, y=lat, label = site), size=3, vjust = 1.25, hjust = -0.1)
Run Code Online (Sandbox Code Playgroud)
我会发布我得到的和我想要的图片,但是我没有足够的声望点来发布图片.= - (
我想在ggplot2中使用覆盖GoogleMaps基本地图的栅格绘制地图.因此,我用get_map()和insert_raster()这样的:
library(ggplot2)
library(ggmap)
bm <- ggmap(get_map(location = "Bangkok", maptype = "hybrid"))
bm + inset_raster(as.raster(r), xmin = r@extent[1], xmax = r@extent[2],
ymin = r@extent[3], ymax = r@extent[4])
Run Code Online (Sandbox Code Playgroud)
是否有可能设置alpha和更改fill颜色?
我正在尝试在我的sf对象下面绘制一个静态基本地图(用于打印).当ggmap我使用时,我首先得到很多错误,然后我似乎无法弄清楚如何将基本地图链接到我的ggplot2对象geom_sf.
library(sf)
# devtools::install_github("tidyverse/ggplot2")
library(ggplot2)
library(ggmap)
nc <- st_read(system.file("shape/nc.shp", package="sf"))
nc_map <- get_map(location = "North Carolina, NC", zoom = 7)
ggmap(nc_map)
nc_centers <- st_centroid(nc)
nc_centers %>%
ggplot() +
geom_sf(aes(color = SID79, size = BIR74),
show.legend = "point") +
coord_sf(datum = NA) +
theme_minimal()
Run Code Online (Sandbox Code Playgroud)
我也更喜欢使用source = "osm"as样式,但总是会返回'400 Bad Request'.
基地图可能还有另一个好包吗?
我一直在R 中的get_map()函数(ggmap库)中遇到这个问题.
我的代码运行时无需source = "google"为几个月指定API密钥(for ).但是,代码在几周前停止了工作.我知道谷歌已经强制要求API密钥(或者他们可能在没有我用尽的api密钥的情况下允许一定数量的呼叫).
但是,即使在指定API密钥(从Google Cloud Platform获得)后,我的代码仍然以相同的方式运行.我甚至联系了谷歌云支持,但是他们说API密钥本身没有任何问题,他们可以在最后调用地图.
我怀疑该get_map()功能api_key在从谷歌调用地图时没有通过.任何指向解决方案的指针都将受到赞赏.
下面是可重现的代码(失败).
library(ggmap)
lat <- c(4,41) # India lat boundaries
lon <- c(68,99) # India long boundaries
center = c(mean(lat), mean(lon))
map <- get_map(location = c(lon = mean(lon),
lat = mean(lat)),
api_key = <my api key>,
zoom = 6,
maptype = "terrain",
source = "google",
messaging = TRUE
)
Run Code Online (Sandbox Code Playgroud)
以下是R中的错误消息(注意API密钥未通过)
trying URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false'
Error in download.file(url, destfile = tmp, quiet = …Run Code Online (Sandbox Code Playgroud) 我是R的新手,我正在玩一个项目来绘制2010年到2020年阿拉巴马州预计的人口增长情况.这是我的代码:
dat <- read.table("C:/Users/rasmus/Documents/countyinfo.txt", sep="\t", header=TRUE)
library(ggplot2)
library(maps)
library(ggmap)
mdat <- map_data('county')
str(mdat)
al1 = get_map(location = c(lon = -86.304474, lat = 32.362563),
zoom = 7, maptype = 'roadmap')
al1MAP = ggmap(al1) +
geom_point(data=dat,inherit.aes = FALSE,
aes(y=Lat, x=Lon, map_id=County, size=Growth), col="red") +
borders("state", colour="red", alpha=0.8) +
borders("county", colour="blue", alpha=0.5)
al1MAP
Run Code Online (Sandbox Code Playgroud)
现在,我有两个问题.
1)国家边界似乎做了奇怪的事情.这是关闭县覆盖的屏幕截图:

2)鉴于这只是关于阿拉巴马州,我想关闭国界以外的边界,但我不知道该怎么做.我的猜测是试验xlim和ylim,但我不知道如何限制它们到阿拉巴马边界多边形.
我可以把路易斯安那州的情节很好......
require(ggplot2)
require(ggmap)
require(maps)
LA <- map_data("state", region="louisiana")
ggplot(LA, aes(x=long, y=lat))+geom_polygon()
Run Code Online (Sandbox Code Playgroud)
现在,我有关于洛杉矶特定城市的销售电话数量的数据.如何为每个城市添加一个积分,以便对该地块进行销售电话?
salesCalls <- data.frame(State=rep("louisiana",5),
City=c("Baton Rouge", "New Orleans", "Shreveport", "Lafayette", "Mandeville"),
Calls=c(10,5,8,13,2))
salesCalls
State City Calls
1 louisiana Baton Rouge 10
2 louisiana New Orleans 5
3 louisiana Shreveport 8
4 louisiana Lafayette 13
5 louisiana Mandeville 2
Run Code Online (Sandbox Code Playgroud) ggmap ×10
r ×10
ggplot2 ×5
geospatial ×2
google-maps ×2
gis ×1
loops ×1
map ×1
plot ×1
r-sf ×1