R 使用ggplot2将道路添加到地图

R 使用ggplot2将道路添加到地图,r,ggplot2,R,Ggplot2,如何将道路(或任何交通基础设施)添加到我在R中绘制的地图中?我想问题的概括是,如何使用geom_polygon()在两层之上绘制两层,而第二层不覆盖第一层 我特别想用一张芝加哥区的地图和一张巴士路线图来做这件事。两者都可以在以下位置在线获取:和此处: 分别绘制每个图形的代码: library(ggplot2) library(rgdal) wards <- readOGR(dsn=path.expand("~/Desktop/Wards"), layer ="geo_export_d15

如何将道路(或任何交通基础设施)添加到我在R中绘制的地图中?我想问题的概括是,如何使用
geom_polygon()
在两层之上绘制两层,而第二层不覆盖第一层

我特别想用一张芝加哥区的地图和一张巴士路线图来做这件事。两者都可以在以下位置在线获取:和此处:

分别绘制每个图形的代码:

library(ggplot2)
library(rgdal)

wards <- readOGR(dsn=path.expand("~/Desktop/Wards"), layer ="geo_export_d15e486d-2802-4700-afe7-9063b55d3e27")
buses <- readOGR(dsn=path.expand("~/Desktop/CTA_Routes"), layer ="CTA_Routes")

#Fortify Wards
wards.point <- fortify(wards, region = "ward")
colnames(wards.point)[6] <- "ward"
wardsmap.df <- join(wards.point, wards@data, by = "ward")

#Fortify Buses
buses.point <- fortify(buses, by = "OBJECTID")
colnames(buses.point)[5] <- "OBJECTID"
buses.df <- join(buses.point, buses@data, by = "OBJECTID")

#Simple Ward map
ggplot() + geom_polygon(data = wardsmap.df, aes(x = long, y = lat, group = group),
               fill = NA, color = "black", size = 0.25) + theme_nothing(legend = TRUE)

#Simple buses map
ggplot() + geom_polygon(data = buses.df, aes(x = long, y = lat, group = group),
               fill = NA, color = "black", size = 0.25) + theme_nothing(legend = TRUE)
库(ggplot2)
图书馆(rgdal)

wards所以事情是这样的:它将覆盖绘图(或者如您所说的覆盖),因为您没有将变量分配给ggplot,所以它每次都写入该绘图。您需要将一个数据集指定给ggplot(病房),然后覆盖其他两个数据集

这里发生的是每个物体,ggplot和geom,正在制作一层地图。如果未为ggplot赋值,则假定变量来自第一个geom。所以这就是为什么它看起来像是在骑自行车,而实际上它只是第二次写第一层。在下面的线条中进行此操作会在基础(病房数据)的顶部绘制两层(几何对象)

这应该很有效

ggplot(data = wardsmap.df, aes(x = long, y = lat, group = group)) +  
geom_polygon(data = wardsmap.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "black", size = 0.25) +
geom_polygon(data = buses.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "red", size = 0.25) + 
theme_nothing(legend = TRUE)
p、 如果你把所有的图层都写成color=black,看起来就不一样了,但我想这只是一个输入错误,所以我在这里更正了

此外,由于我看到没有分配协调人,因此从上面改进:

ggplot(data = wardsmap.df, aes(x = long, y = lat, group = group)) +  
coord_cartesian()+
geom_polygon(data = wardsmap.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "black", size = 0.25) +
geom_polygon(data = buses.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "red", size = 0.25) + 
theme_nothing(legend = TRUE)

事情是这样的:它会过度绘制(或者像你说的那样重写),因为你没有把变量分配给ggplot,所以每次它都会写入。您需要将一个数据集指定给ggplot(病房),然后覆盖其他两个数据集

这里发生的是每个物体,ggplot和geom,正在制作一层地图。如果未为ggplot赋值,则假定变量来自第一个geom。所以这就是为什么它看起来像是在骑自行车,而实际上它只是第二次写第一层。在下面的线条中进行此操作会在基础(病房数据)的顶部绘制两层(几何对象)

这应该很有效

ggplot(data = wardsmap.df, aes(x = long, y = lat, group = group)) +  
geom_polygon(data = wardsmap.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "black", size = 0.25) +
geom_polygon(data = buses.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "red", size = 0.25) + 
theme_nothing(legend = TRUE)
p、 如果你把所有的图层都写成color=black,看起来就不一样了,但我想这只是一个输入错误,所以我在这里更正了

此外,由于我看到没有分配协调人,因此从上面改进:

ggplot(data = wardsmap.df, aes(x = long, y = lat, group = group)) +  
coord_cartesian()+
geom_polygon(data = wardsmap.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "black", size = 0.25) +
geom_polygon(data = buses.df, aes(x = long, y = lat, group = group),
           fill = NA, color = "red", size = 0.25) + 
theme_nothing(legend = TRUE)

主要问题在于你的数据。它们有不同的投影,所以它们看起来像是在地球的不同地方

wards@proj4string
CRS arguments: +proj=longlat +ellps=WGS84 +no_defs

buses@proj4string
CRS arguments:
 +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000
+y_0=0 +datum=NAD83 +units=us-ft +no_defs +ellps=GRS80 +towgs84=0,0,0 
转换为单个投影后,所有投影都是固定的:

buses <- spTransform(buses, CRS("+proj=longlat +datum=WGS84"))
wards <- spTransform(wards, CRS("+proj=longlat +datum=WGS84"))

bus主要问题在于数据。它们有不同的投影,所以它们看起来像是在地球的不同地方

wards@proj4string
CRS arguments: +proj=longlat +ellps=WGS84 +no_defs

buses@proj4string
CRS arguments:
 +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000
+y_0=0 +datum=NAD83 +units=us-ft +no_defs +ellps=GRS80 +towgs84=0,0,0 
转换为单个投影后,所有投影都是固定的:

buses <- spTransform(buses, CRS("+proj=longlat +datum=WGS84"))
wards <- spTransform(wards, CRS("+proj=longlat +datum=WGS84"))

实际上,您可以通过添加坐标(coord_cartesian())来解决投影问题,因此,如果您做到以下几点,就可以了。ggplot()+coord_笛卡尔()+geom_多边形(data=wardsmap.df,aes(x=long,y=lat,group=group),fill='black',color=“black”,size=0.25,alpha=.5)+geom_路径(data=bus.df,aes(x=long,y=lat,group=group),color=“red”,size=0.35)实际上您可以通过添加coord_笛卡尔()来解决投影问题因此,如果你做到以下几点,应该没问题。ggplot()+coord_笛卡尔()+geom_多边形(数据=wardsmap.df,aes(x=long,y=lat,group=group),fill='black',color=“black”,size=0.25,alpha=.5)+geom_路径(数据=bus.df,aes(x=long,y=lat,group=group),color=“red”,size=0.35)