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

如何解决R语言“plot.new has not been called yet”报错问题

解决sf包绘图报错:Error in plot.xy(...) : plot.new has not been called yet

核心问题原因

这个报错通常是绘图顺序错误,或是没正确用add = TRUE实现图层叠加导致的,手动调用plot.new()反而会干扰sf包的自动绘图流程。

正确实现步骤(以北卡罗来纳州地图为例)

直接用以下可运行代码替代教程代码,即可生成带质心的地图:

# 加载sf包
library(sf)

# 加载sf自带的北卡罗来纳州矢量数据
nc <- st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

# 计算各区域质心
nc_centroids <- st_centroid(nc)

# 1. 先绘制区域底图(sf会自动初始化绘图设备)
plot(st_geometry(nc), main = "北卡罗来纳州区域与质心")

# 2. 叠加质心点,必须添加add = TRUE参数
plot(st_geometry(nc_centroids), add = TRUE, col = "darkred", pch = 19, cex = 0.6)

关键注意事项

  • 禁止手动调用plot.new():sf的plot()方法会自动完成绘图设备初始化,提前调用会导致图层上下文混乱,引发报错。
  • 严格遵循绘图顺序:先画底图(区域面),再叠加质心点,叠加时必须指定add = TRUE,否则会新开绘图窗口,无法实现图层合并。
  • 确认质心对象类型:st_centroid()返回的必须是sf点对象,若手动提取坐标转为普通向量,用points()叠加时要确保底图已绘制完成。

额外排查方向

如果仍报错,检查以下内容:

  • 运行packageVersion("sf")确认版本,低于0.9-0的旧版本可能存在绘图兼容问题,建议更新到最新版。
  • 运行st_is_valid(nc)检查矢量数据是否损坏,确保nc数据集加载正常。

内容的提问来源于stack exchange,提问作者Giulia Petrilli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:06:05