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