如何在R的ggplot2地图中将所有点连接到单个指定点?
解决方案:将所有点连接到苏格兰最北端单点
你已经搞定了基础地图的绘制,现在要把每个坐标点都连到苏格兰最北端的单个点对吧?之前用geom_line没得到预期效果,问题出在geom_line默认是按数据行的顺序把所有点连起来,而不是让每个点单独和中心点建立连线。下面是正确的实现方式:
步骤1:构造连线专用数据集
首先你需要确定苏格兰最北端的LAEA投影坐标(替换成你实际使用的坐标值),然后把这个中心点复制多份,和loc_laea_df里的每个数据点一一配对:
# 定义苏格兰最北端的LAEA坐标(替换成你的实际坐标) north_scot_laea <- data.frame(V1 = 你的X坐标值, V2 = 你的Y坐标值) # 加载dplyr处理数据(如果没装先运行install.packages("dplyr")) library(dplyr) # 构造连线数据集:每个数据点对应一行中心点 + 一行原数据点 connect_data <- bind_rows( # 给原数据点添加唯一标识,用来分组 loc_laea_df %>% mutate(point_id = row_number(), type = "data_point"), # 复制中心点,和每个数据点一一对应 north_scot_laea %>% slice(rep(1, nrow(loc_laea_df))) %>% mutate(point_id = row_number(), type = "center_point") ) %>% # 按point_id分组,确保每个组里是一个中心点+一个数据点 group_by(point_id) %>% arrange(type) %>% ungroup()
步骤2:在ggplot中添加连线
把构造好的connect_data传入geom_line,并指定group=point_id,这样ggplot会为每个point_id对应的两个点单独绘制一条连线:
ggplot() + geom_polygon(data=wmap_laea_df, aes(long,lat,group=group), fill="white")+ geom_path(data=countries_laea_df, aes(long,lat, group=group), color="light grey", size=0.1) + # 添加连线(放在点图层之前,避免遮挡点) geom_line(data=connect_data, aes(V1, V2, group=point_id), color="black", size=1) + # 原有的点图层 geom_point(data=loc_laea_df, aes(V1, V2, size=V3), color="black", alpha=6/10) + scale_size(range=c(1,2.5), guide = "legend",labs(size="Count")) + coord_cartesian(xlim = c((xmin-buff),(xmax+buff)), ylim = c((ymin-buff),(ymax+buff))) + theme(aspect.ratio=1)+ theme_opts
这样就能实现每个数据点单独连接到苏格兰最北端的效果,和你后来找到的解决方案思路是一致的。
内容的提问来源于stack exchange,提问作者pApaAPPApapapa
相关产品推荐
相关产品推荐

