在 R 中删除国家地图边界外的数据
Removing data outside country map boundary in R
我知道这很简单,但无法正常工作。我想删除下面地图上多余的数据点。我该怎么做?
下面的代码给了我结果。
ggplot() +
geom_polygon(data = rwa2, aes(x = long, y = lat, group= group),
colour = "black", size = 0.5, fill = "white") +
geom_tile(data = df, aes(x = Lon, y = Lat, z = z, fill = z), alpha = 0.8) +
ggtitle("State Data") +
xlab("Longitude") +
ylab("Latitude") +
scale_fill_distiller(type = "div", palette = "Spectral")+
theme_bw() +
theme(plot.title = element_text(size = 25, face = "bold"),
legend.title = element_text(size = 15),
axis.text = element_text(size = 15),
axis.title.x = element_text(size = 20, vjust = -0.5),
axis.title.y = element_text(size = 20, vjust = 0.2),
legend.text = element_text(size = 10)) +
coord_map()
我想删除州界之外的所有数据。
边界坐标是使用 readRDS
从 Rdata 文件获得的,其中 ID_2 代表州,ID_3 代表地区,名称也是如此。请引导我。
由于我们没有您的数据,因此很难处理您的案例。但是,我想给你留下一个方法。只要我从你的代码中可以看出,你有一个名为 df
的数据框。您想要创建一个临时的 SpatialPointsDataFrame。我们称它为 spdf
。您还有名为 rwa2
的多边形数据,它也是一个数据框。如果 rwa2
来自空间 class 对象(即 SpatialPolygonsDataFrame),您希望使用它来对停留在多边形内的数据点进行子集化。假设您有一个名为 sp.rwa2
.
的空间对象
library(sp)
library(ggplot2)
第 1 步:使用 df
创建一个 SpatialPointsDataFrame
确保将 sp.rwa2
的 proj4string 分配给 spdf
。我在这段代码中只有一个示例 proj4string。
spdf <- SpatialPointsDataFrame(coords = df[, c("Lon", "Lat")], data = df,
proj4string = CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
第 2 步:子集数据点位于 sf.rwa2 内。
whatever <- spdf[!is.na(over(spdf, as(sp.rwa2, "SpatialPolygons"))), ]
第 3 步:将 spdf 转换为数据框
whatever <- as.data.frame(whatever)
然后,您将 运行 您的 ggplot 代码。 rwa2
是一个数据框。
ggplot() +
geom_polygon(data = rwa2, aes(x = long, y = lat, group = group),
colour = "black", size = 0.5, fill = "white") +
geom_tile(data = whatever, aes(x = Lon, y = Lat, fill = z), alpha = 0.8) +
labs(title = "State Data", x = "Longitude", y = "Latitude") +
scale_fill_distiller(type = "div", palette = "Spectral") +
theme_bw() +
theme(plot.title = element_text(size = 25, face = "bold"),
legend.title = element_text(size = 15),
axis.text = element_text(size = 15),
axis.title.x = element_text(size = 20, vjust = -0.5),
axis.title.y = element_text(size = 20, vjust = 0.2),
legend.text = element_text(size = 10)) +
coord_map()
我知道这很简单,但无法正常工作。我想删除下面地图上多余的数据点。我该怎么做? 下面的代码给了我结果。
ggplot() +
geom_polygon(data = rwa2, aes(x = long, y = lat, group= group),
colour = "black", size = 0.5, fill = "white") +
geom_tile(data = df, aes(x = Lon, y = Lat, z = z, fill = z), alpha = 0.8) +
ggtitle("State Data") +
xlab("Longitude") +
ylab("Latitude") +
scale_fill_distiller(type = "div", palette = "Spectral")+
theme_bw() +
theme(plot.title = element_text(size = 25, face = "bold"),
legend.title = element_text(size = 15),
axis.text = element_text(size = 15),
axis.title.x = element_text(size = 20, vjust = -0.5),
axis.title.y = element_text(size = 20, vjust = 0.2),
legend.text = element_text(size = 10)) +
coord_map()
我想删除州界之外的所有数据。
边界坐标是使用 readRDS
从 Rdata 文件获得的,其中 ID_2 代表州,ID_3 代表地区,名称也是如此。请引导我。
由于我们没有您的数据,因此很难处理您的案例。但是,我想给你留下一个方法。只要我从你的代码中可以看出,你有一个名为 df
的数据框。您想要创建一个临时的 SpatialPointsDataFrame。我们称它为 spdf
。您还有名为 rwa2
的多边形数据,它也是一个数据框。如果 rwa2
来自空间 class 对象(即 SpatialPolygonsDataFrame),您希望使用它来对停留在多边形内的数据点进行子集化。假设您有一个名为 sp.rwa2
.
library(sp)
library(ggplot2)
第 1 步:使用 df
创建一个 SpatialPointsDataFrame
确保将 sp.rwa2
的 proj4string 分配给 spdf
。我在这段代码中只有一个示例 proj4string。
spdf <- SpatialPointsDataFrame(coords = df[, c("Lon", "Lat")], data = df,
proj4string = CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
第 2 步:子集数据点位于 sf.rwa2 内。
whatever <- spdf[!is.na(over(spdf, as(sp.rwa2, "SpatialPolygons"))), ]
第 3 步:将 spdf 转换为数据框
whatever <- as.data.frame(whatever)
然后,您将 运行 您的 ggplot 代码。 rwa2
是一个数据框。
ggplot() +
geom_polygon(data = rwa2, aes(x = long, y = lat, group = group),
colour = "black", size = 0.5, fill = "white") +
geom_tile(data = whatever, aes(x = Lon, y = Lat, fill = z), alpha = 0.8) +
labs(title = "State Data", x = "Longitude", y = "Latitude") +
scale_fill_distiller(type = "div", palette = "Spectral") +
theme_bw() +
theme(plot.title = element_text(size = 25, face = "bold"),
legend.title = element_text(size = 15),
axis.text = element_text(size = 15),
axis.title.x = element_text(size = 20, vjust = -0.5),
axis.title.y = element_text(size = 20, vjust = 0.2),
legend.text = element_text(size = 10)) +
coord_map()