如何在R语言ggplot2中为地理位置质心绘制误差棒并解决相关报错
问题修复方案
核心错误原因
- 误差棒函数使用错误:
geom_errorbar仅支持绘制垂直误差棒,要求必填参数为x、ymin、ymax;水平方向误差棒需要单独调用geom_errorbarh,必填参数为y、xmin、xmax,你将两类参数合并写入同一个geom_errorbar,触发缺失参数报错。 - 水平误差范围计算错误:你原代码中
xmin参数写为Longitude_weighted_mean + Longitude_weighted_sd,和xmax完全一致,即使解决参数问题也无法正常显示误差棒。 - 列名拼写错误:质心图层中
fill = period的period为小写,而你的centroids数据框中对应列名是大写开头的Period,会额外触发对象找不到的报错。
修正后的绘图代码
plot1 <- ggplot(data = world) + geom_sf(fill = "gray92") + geom_polygon(data = states, aes(x = long, y = lat, group = group), color = "black", fill = NA) + geom_point(data = dat, aes(x = Longitude, y = Latitude, color = Period), alpha = 0.2, size = 1) + # 修正Period大小写问题 geom_point(data = centroids, aes(x = Longitude_weighted_mean, y = Latitude_weighted_mean, fill = Period), size = 6, pch = 21) + # 垂直纬度误差棒 geom_errorbar(data = centroids, aes(x = Longitude_weighted_mean, ymin = Latitude_weighted_mean - Latitude_weighted_sd, ymax = Latitude_weighted_mean + Latitude_weighted_sd), width = 0.05) + # 水平经度误差棒 geom_errorbarh(data = centroids, aes(y = Latitude_weighted_mean, xmin = Longitude_weighted_mean - Longitude_weighted_sd, xmax = Longitude_weighted_mean + Longitude_weighted_sd), height = 0.05) + theme_bw() + # 合并重复的coord_sf设置 coord_sf(crs = "+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs", xlim = c(-92, -88), ylim = c(33.5, 36.7), expand = TRUE) + theme(plot.title = element_text(size = 20), legend.title = element_text(size = 20), legend.text = element_text(size = 16), axis.title = element_text(size = 20), axis.text = element_text(size = 16), axis.text.x = element_text(angle = 45, hjust = 1), element_line(color = "black"))+ annotate("text", label = "TN", size = 7, x = -88.3, y = 35.3) + annotate("text", label = "AR", size = 7, x = -91.7, y = 36) + annotate("text", label = "MS", size = 7, x = -89, y = 34) + xlab("Longitude") + ylab("Latitude") plot1
代码中的width和height参数分别控制垂直、水平误差棒两端短横线的长度,可根据实际显示效果调整数值。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

