将地图上的点限制为一层
Limit points on map plot to one layer
给定以下地图:
library(data.table)
library(ggplot2)
data.table
test <- data.table(x=c(-89, -85), y=c(40, 35))
state <-as.data.table(map_data("state"))
ggplot() +
geom_polygon(data=state[region=="illinois"], aes(x=long, y=lat, group=group)) +
geom_point(data=test, aes(x=x, y=y), col="blue")
有没有一种简单的方法可以限制 test
data.table 中点的绘制,以便地图上只显示 geom_polygon
图层范围内的点?
干杯
您可以使用 mgcv
包中的 in.out
函数来 select 只有多边形内的点。您可以使用它来仅绘制伊利诺伊州边界内的点。下面的示例添加了一个额外的点,它位于伊利诺伊州边界的矩形内,但不在伊利诺伊州的边界内。
library(ggplot2)
library(mgcv)
test <- data.frame(lat=c(40, 35, 39), long=c(-89, -85, -91))
state = map_data("state")
# Limit points only to those inside Illinois
point.filter = in.out(as.matrix(state[state$region=="illinois", c("lat","long")]),
as.matrix(test))
ggplot() +
geom_polygon(data=state[state$region=="illinois", ],
aes(x=long, y=lat, group=group), fill="white", color="black") +
geom_point(data=test[point.filter, ], aes(x=long, y=lat), col="blue") +
geom_point(data=test, aes(x=long, y=lat), col="red", pch=1, size=3) +
coord_map(xlim=range(state[state$region=="illinois",]$long),
ylim=range(state[state$region=="illinois",]$lat))
您可以使用 in.out
来测试一组点中的每一个点是否在多个多边形(例如,多个州)中的至少一个内,但在这种情况下,每个多边形必须由NA
行。下面是一个示例,我们在其中测试一组点是否在连续的美国 48 个州内,但使用 state
数据框,每个州都有一个单独的多边形。我添加了两个不在 U.S 内的点。对于此插图:
library(dplyr) # For bind_rows() function
# Add an NA row between each state
tmp=lapply(split(state[,c("lat","long","region")], state$region), function(x) {
bind_rows(list(x, data.frame(region=NA, lat=NA, long=NA)))
})
tmp = bind_rows(tmp)
# Points for testing
test <- data.frame(lat=c(40, 35, 39, -10, 20), long=c(-89, -85, -91, -89, 0))
point.filter = in.out(as.matrix(tmp[, c("lat","long")]),
as.matrix(test))
point.filter
[1] TRUE TRUE TRUE FALSE FALSE
给定以下地图:
library(data.table)
library(ggplot2)
data.table
test <- data.table(x=c(-89, -85), y=c(40, 35))
state <-as.data.table(map_data("state"))
ggplot() +
geom_polygon(data=state[region=="illinois"], aes(x=long, y=lat, group=group)) +
geom_point(data=test, aes(x=x, y=y), col="blue")
有没有一种简单的方法可以限制 test
data.table 中点的绘制,以便地图上只显示 geom_polygon
图层范围内的点?
干杯
您可以使用 mgcv
包中的 in.out
函数来 select 只有多边形内的点。您可以使用它来仅绘制伊利诺伊州边界内的点。下面的示例添加了一个额外的点,它位于伊利诺伊州边界的矩形内,但不在伊利诺伊州的边界内。
library(ggplot2)
library(mgcv)
test <- data.frame(lat=c(40, 35, 39), long=c(-89, -85, -91))
state = map_data("state")
# Limit points only to those inside Illinois
point.filter = in.out(as.matrix(state[state$region=="illinois", c("lat","long")]),
as.matrix(test))
ggplot() +
geom_polygon(data=state[state$region=="illinois", ],
aes(x=long, y=lat, group=group), fill="white", color="black") +
geom_point(data=test[point.filter, ], aes(x=long, y=lat), col="blue") +
geom_point(data=test, aes(x=long, y=lat), col="red", pch=1, size=3) +
coord_map(xlim=range(state[state$region=="illinois",]$long),
ylim=range(state[state$region=="illinois",]$lat))
您可以使用 in.out
来测试一组点中的每一个点是否在多个多边形(例如,多个州)中的至少一个内,但在这种情况下,每个多边形必须由NA
行。下面是一个示例,我们在其中测试一组点是否在连续的美国 48 个州内,但使用 state
数据框,每个州都有一个单独的多边形。我添加了两个不在 U.S 内的点。对于此插图:
library(dplyr) # For bind_rows() function
# Add an NA row between each state
tmp=lapply(split(state[,c("lat","long","region")], state$region), function(x) {
bind_rows(list(x, data.frame(region=NA, lat=NA, long=NA)))
})
tmp = bind_rows(tmp)
# Points for testing
test <- data.frame(lat=c(40, 35, 39, -10, 20), long=c(-89, -85, -91, -89, 0))
point.filter = in.out(as.matrix(tmp[, c("lat","long")]),
as.matrix(test))
point.filter
[1] TRUE TRUE TRUE FALSE FALSE