我试图用两个表示形状和颜色的图例来制作地图(下面的例子中为"Type"和"Org"),并且有图例插图.我可以放置传说,但我希望它们左对齐,以便它们的左边缘对齐.除了相互集中之外,我无法做出任何其他事情:
require(ggplot2)
require(ggmap)
require(grid)
require(mapproj)
data <- data.frame(Org=rep(c("ABCDEFG","HIJKLMNOP","QRSTUVWX"),4)
, Type=rep(c("Y","Z"),6), Lat=runif(12,48,54.5)
, Long=runif(12,-133.5,-122.5))
osmMap <- get_map(location=c(-134,47.5,-122,55), source = 'osm')
points <- geom_jitter(data=data, aes(Long, Lat, shape=Type
, colour=Org))
legend <- theme(legend.justification=c(0,0), legend.position=c(0,0)
, legend.margin=unit(0,"lines"), legend.box="vertical"
, legend.key.size=unit(1,"lines"), legend.text.align=0
, legend.title.align=0)
ggmap(osmMap) + points + legend
Run Code Online (Sandbox Code Playgroud)

并不是说这对我的问题至关重要,但这是我的情节示例,我想在其上添加一个比例尺.
ggmap(get_map(location = "Kinston, NC", zoom = 12, maptype = 'hybrid')) +
geom_point(x = -77.61198, y = 35.227792, colour = "red", size = 5) +
geom_point(x = -77.57306, y = 35.30288, colour = "blue", size = 3) +
geom_point(x = -77.543, y = 35.196, colour = "blue", size = 3) +
geom_text(x = -77.575, y = 35.297, label = "CRONOS Data") +
geom_text(x = -77.54, y = 35.19, label = "NOAA") +
geom_text(x = -77.61, y = 35.22, label = …Run Code Online (Sandbox Code Playgroud) 我正在生成具有世界规模数据的地图,然后放大到某些地区.在放大视图中,我想通过将箭头从框的中心指向数据点在外部世界中的位置来显示边界框外还有其他数据点.
注意:我不需要它是一个"大圆"路径,只需要墨卡托投影中的XY矢量,因为我想这对于"普通"图也是有用的.
例如,这是显示数据范围的世界地图:

这里是放大的视图,手动添加洋红色箭头以显示我想要生成的内容.

下面是我用来生成这两个基本图的代码和数据.我需要的是一种生成箭头的方法.
require(ggplot2)
te = structure(list(lat = c(33.7399, 32.8571, 50.2214, 36.96263, 33.5835,
33.54557, 47.76147, 48, 59.40289, 35.93411, 32.87962, 38.3241,
50.03844, 37.44, 50.07774, 50.26668, 36.5944), lng = c(-118.37608,
-117.25746, -5.3865, -122.00809, -117.86159, -117.79805, -124.45055,
-126, -146.35157, -122.931472, -117.25285, -123.07331, -5.26339,
25.4, -5.709894, -3.86828, -121.96201)), .Names = c("lat", "lng"
), class = "data.frame", row.names = c(NA, -17L))
all_states = map_data("world")
# world version:
wp = ggplot() +
geom_polygon(data = all_states, aes(x = long, y = lat, group = …Run Code Online (Sandbox Code Playgroud) 我正在尝试绘制使用RgoogleMaps包查询的Google地图,并将其与ggplot结合使用.最后,我想显示总人口的使用情况geom_point,有点类似于下图,但是由于过度密谋,我试图集中精力于蒙哥马利地区.
我很沮丧,因为我不能画出我的查询地图中R.我尝试了几个包,如中read.jpeg和png,但它并没有完全制定.
R代码:
#query google map
al1 <- GetMap(center=c(32.362563,-86.304474), zoom=11, destfile = "al2.jpeg",
format="jpg",maptype="roadmap")
#load only specific states
alabama <- subset(all_states, region %in% c("alabama"))
#population
p1 <- ggplot()
p1 <- p1 + geom_polygon(data=alabama,
aes(x=long, y=lat, group=group), colour="white", fill="grey10")
p1 <- p1 + geom_point(data=quote, aes(x=IntPtLon, y=IntPtLat, size=TotPop,
color=TotPop),colour="coral1") + scale_size(name="Total Pop")
Run Code Online (Sandbox Code Playgroud)

编辑:
这是我粗略的结果.我还是想:

al1 <- get_map(location = c(lon = -86.304474, lat = 32.362563), zoom = 11, maptype = 'terrain')
al1MAP <- …Run Code Online (Sandbox Code Playgroud) 我想计算大约之间的距离.100,000种不同的邮政编码.我知道包中的mapdist功能ggmap
mapdist 完美的工作:
library(ggmap)
mapdist('Washington', 'New York', mode = 'driving')
# from to m km miles seconds minutes hours
# 1 Washington New York 366284 366.284 227.6089 13997 233.2833 3.888056
mapdist('20001', '10001', mode = 'driving')
# from to m km miles seconds minutes hours
# 1 20001 10001 363119 363.119 225.6421 13713 228.55 3.809167
Run Code Online (Sandbox Code Playgroud)
但是,mapdist依赖于Google地理编码API,该API 每天的查询限制为2,500个地理定位请求.
您是否知道使用具有更高请求限制的其他服务(例如诺基亚地图或必应)来计算两点之间距离的替代r代码?
我有一张地图,上面画着8个点:
library(ggplot2)
library(ggmap)
data = data.frame(
ID = as.numeric(c(1:8)),
longitude = as.numeric(c(-63.27462, -63.26499, -63.25658, -63.2519, -63.2311, -63.2175, -63.23623, -63.25958)),
latitude = as.numeric(c(17.6328, 17.64614, 17.64755, 17.64632, 17.64888, 17.63113, 17.61252, 17.62463))
)
island = get_map(location = c(lon = -63.247593, lat = 17.631598), zoom = 13, maptype = "satellite")
islandMap = ggmap(island, extent = "panel", legend = "bottomright")
RL = geom_point(aes(x = longitude, y = latitude), data = data, color = "#ff0000")
islandMap + RL + scale_x_continuous(limits = c(-63.280, -63.21), expand = c(0, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用库中的geocode函数来获取特定位置的坐标.到目前为止,我能够正常使用该功能.ggmapsR
我遇到的问题是我希望将每日限制从2,500增加到100,000.官方Google 文档
说,如果您在项目上启用结算,这很容易实现,我很乐意这样做.继续此过程后,Google Developers Console将为您提供个性化的API密钥.
但是,该geocode功能无法选择放入此个性化API密钥.相反,它要求client(业务用户的客户端ID)和signature(业务用户的签名),这是Google Maps API for Work客户可以访问API的方式.我知道这也是一个选项,但这似乎是一个非常大的用例,因为Google Maps API for Work似乎是为大型企业帐户设计的:
根据年度合同购买,每24小时的每日配额为100,000个请求.
所以我的问题归结为:我可以使用库中的geocode函数来ping Google Maps Geocoding API吗?ggmapsR
我尝试了以下代码:
library(ggplot2)
library(ggmap)
library(sf)
nc <- st_read(system.file("shape/nc.shp", package = "sf"))
str(nc)
Classes ‘sf’ and 'data.frame': 100 obs. of 15 variables:
$ AREA : num 0.114 0.061 0.143 0.07 0.153 0.097 0.062 0.091 0.118 0.124 ...
$ PERIMETER: num 1.44 1.23 1.63 2.97 2.21 ...
$ CNTY_ : num 1825 1827 1828 1831 1832 ...
$ CNTY_ID : num 1825 1827 1828 1831 1832 ...
$ NAME : Factor w/ 100 levels "Alamance","Alexander",..: 5 3 86 27 66 46 15 37 …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人知道如何在 R 中的 ggmap 绘制的地图上保留谷歌版权信息(使用新比例)?
例如:
library(ggmap)
library(ggplot2)
# download basemap
ggmap::register_google(key="xxx") # insert your hey here xxx
ggmap::ggmap_show_api_key()
base_map <- get_googlemap(center = c(lon= -2.325278, lat=54.6000000), zoom = 5, style = 'element:labels|visibility:off',color= "bw")
Run Code Online (Sandbox Code Playgroud)
当我在base_map不改变比例的情况下进行绘图时,版权信息会插入到绘图的底部,如下所示:
ggmap(base_map, extent = "panel")
Run Code Online (Sandbox Code Playgroud)
然而,当我绘制base_map一个新的x,并y axis放大到英国大陆。我还裁剪了版权信息。如下:
ggmap(base_map, extent = "panel")+
scale_x_continuous(limits = c(-7, 3), expand = c(0, 0)) +
scale_y_continuous(limits = c(49.5, 59), expand = c(0, 0))
Run Code Online (Sandbox Code Playgroud)
有谁知道我如何获得第二个情节但有出版所需的版权信息?
我试图更改zoom=函数中的参数,get_googlemap()但它似乎总是将英国的顶部或底部剪掉,并且在绘制数据时我需要能够看到整个区域。
非常感谢您的帮助!
我喜欢ggmap在特定区域绘制街道.我通过立交桥api从osm获取数据.它适用于大多数街道geom_path.然而,一些街道搞砸了.任何提示都表示赞赏.
请查看http://overpass-turbo.eu/获取所需的输出.您可以在下面的R代码中找到查询.
library(httr)
library(tidyverse)
#> ?? Attaching packages ??????????????????????????????????????????????????????????????????????????????????????????? tidyverse 1.2.1 ??
#> ? ggplot2 2.2.1 ? purrr 0.2.4
#> ? tibble 1.4.2 ? dplyr 0.7.4
#> ? tidyr 0.8.0 ? stringr 1.3.0
#> ? readr 1.1.1 ? forcats 0.3.0
#> ?? Conflicts ?????????????????????????????????????????????????????????????????????????????????????????????? tidyverse_conflicts() ??
#> ? dplyr::filter() masks stats::filter()
#> ? dplyr::lag() masks stats::lag()
library(ggmap)
library(rlist)
# Get data from overpass api
query <- paste('[out:json];',
'(way["highway"~"primary|residential"](53.5970, 9.9010, 53.6050, 9.9080););',
'(._;>;);',
'out body;') …Run Code Online (Sandbox Code Playgroud) ggmap ×10
r ×10
ggplot2 ×8
google-maps ×3
dictionary ×1
geocode ×1
geocoding ×1
geometry ×1
geospatial ×1
gis ×1
maps ×1
overpass-api ×1
plot ×1
r-grid ×1
r-sf ×1
spatial ×1