围绕数据中心点绘制两个圆圈
plot two circles around center point of data
我有一个围绕中心点的经纬度数据框。经纬度代表两组。这些组用 1 或 0 表示。我可以用不同的形状围绕中心点绘制
和颜色,但我希望颜色更加鲜明。我还想分别围绕点 300 米和 600 米绘制两个圆圈。我试过使用
但运气不好
一个小样本看起来像这样
lat <- c(42.99052, 42.99085, 42.99046, 42.99081, 42.99197, 42.99122, 42.99154,42.99161, 42.99102, 42.99014, 42.98966, 42.99091, 42.99092, 42.99114 ,42.99000)
lon <-c(78.69961, -78.69871, -78.69878, -78.69868, -78.69825, -78.69929, -78.69784, -78.69960, -78.69904, -78.69918, -78.69998, -78.69746, -78.70145, -78.70020, -78.70010)
response <- c(0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1)
data <- data.frame(lat, lon, response)
我的中心点是
(42.990707, -78.698899)
我得到的地图没有像这样的圆圈和不同的颜色
library(ggplot2)
library(ggmap)
library(viridis)
#getting map
mapgilbert <- get_map(location = c(lon = -78.698899 , lat=42.990707), zoom = 17,
maptype = "terrain", scale = 2)
ggmap(mapgilbert) +
geom_point(data = data, aes(x = lon, y = lat, color = response , alpha = 1, fill = response),
size = 2, shape = response) +
guides(fill = FALSE, alpha = FALSE, size = FALSE) +
scale_color_viridis(begin = 0, end = .7)
如有任何帮助,我们将不胜感激。
我通过修改
中的答案得到了解决方案
center_df<-data.frame(ID=c(1),lon=c(-78.698899),lat=c(42.990707))
make_circles <- function(centers, radius, nPoints = 500){
# centers: the data frame of centers with ID
# radius: radius measured in kilometer
#
meanLat <- mean(centers$lat)
# length per longitude changes with lattitude, so need correction
radiusLon <- radius /111 / cos(meanLat/57.3)
radiusLat <- radius / 111
circleDF <- data.frame(ID = rep(centers$ID, each = nPoints))
angle <- seq(0,2*pi,length.out = nPoints)
circleDF$lon <- unlist(lapply(centers$lon, function(x) x + radiusLon * cos(angle)))
circleDF$lat <- unlist(lapply(centers$lat, function(x) x + radiusLat * sin(angle)))
return(circleDF)
}
myCircles <- make_circles(center_df, 0.2)
myCircles2 <- make_circles(center_df, 0.1)
mapgilbert2<- get_map(location = c(lon = -78.70000 , lat=42.991107), zoom = 16,
maptype = "terrain", scale = 2)
ggmap(mapgilbert2)+
geom_point(data = data, aes(x = lon, y = lat, fill=as.factor(exposure) , alpha = 1), size = 2, pch=21)+
guides(fill=FALSE, alpha=FALSE, size=guide_legend)+
scale_color_viridis(begin = 0, end = .7)+
geom_point(data=myCircles,aes(x=lon,y=lat), color='red')+
geom_point(data=myCircles2,aes(x=lon,y=lat), color='blue')+
scale_fill_manual(values=c("purple", "green"))
我有一个围绕中心点的经纬度数据框。经纬度代表两组。这些组用 1 或 0 表示。我可以用不同的形状围绕中心点绘制 和颜色,但我希望颜色更加鲜明。我还想分别围绕点 300 米和 600 米绘制两个圆圈。我试过使用
但运气不好
一个小样本看起来像这样
lat <- c(42.99052, 42.99085, 42.99046, 42.99081, 42.99197, 42.99122, 42.99154,42.99161, 42.99102, 42.99014, 42.98966, 42.99091, 42.99092, 42.99114 ,42.99000)
lon <-c(78.69961, -78.69871, -78.69878, -78.69868, -78.69825, -78.69929, -78.69784, -78.69960, -78.69904, -78.69918, -78.69998, -78.69746, -78.70145, -78.70020, -78.70010)
response <- c(0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1)
data <- data.frame(lat, lon, response)
我的中心点是
(42.990707, -78.698899)
我得到的地图没有像这样的圆圈和不同的颜色
library(ggplot2)
library(ggmap)
library(viridis)
#getting map
mapgilbert <- get_map(location = c(lon = -78.698899 , lat=42.990707), zoom = 17,
maptype = "terrain", scale = 2)
ggmap(mapgilbert) +
geom_point(data = data, aes(x = lon, y = lat, color = response , alpha = 1, fill = response),
size = 2, shape = response) +
guides(fill = FALSE, alpha = FALSE, size = FALSE) +
scale_color_viridis(begin = 0, end = .7)
如有任何帮助,我们将不胜感激。
我通过修改
中的答案得到了解决方案center_df<-data.frame(ID=c(1),lon=c(-78.698899),lat=c(42.990707))
make_circles <- function(centers, radius, nPoints = 500){
# centers: the data frame of centers with ID
# radius: radius measured in kilometer
#
meanLat <- mean(centers$lat)
# length per longitude changes with lattitude, so need correction
radiusLon <- radius /111 / cos(meanLat/57.3)
radiusLat <- radius / 111
circleDF <- data.frame(ID = rep(centers$ID, each = nPoints))
angle <- seq(0,2*pi,length.out = nPoints)
circleDF$lon <- unlist(lapply(centers$lon, function(x) x + radiusLon * cos(angle)))
circleDF$lat <- unlist(lapply(centers$lat, function(x) x + radiusLat * sin(angle)))
return(circleDF)
}
myCircles <- make_circles(center_df, 0.2)
myCircles2 <- make_circles(center_df, 0.1)
mapgilbert2<- get_map(location = c(lon = -78.70000 , lat=42.991107), zoom = 16,
maptype = "terrain", scale = 2)
ggmap(mapgilbert2)+
geom_point(data = data, aes(x = lon, y = lat, fill=as.factor(exposure) , alpha = 1), size = 2, pch=21)+
guides(fill=FALSE, alpha=FALSE, size=guide_legend)+
scale_color_viridis(begin = 0, end = .7)+
geom_point(data=myCircles,aes(x=lon,y=lat), color='red')+
geom_point(data=myCircles2,aes(x=lon,y=lat), color='blue')+
scale_fill_manual(values=c("purple", "green"))