You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:09:04