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

使用R可视化转移概率时出现plot.new未调用错误求助

问题:绘制转移概率图表时出现"plot.new has not been called yet"错误

错误信息

Error in plot.xy(xy.coords(x, y), type = type, ...) :
plot.new has not been called yet

问题根源

  1. 绘图初始化逻辑错误:你把points()嵌套在plot()里调用,且用x=NULL的方式无法正确创建绘图区域。plot()需要单独调用以初始化绘图框架,之后才能用points()添加数据点,也才能正常使用legend()。
  2. 世代数变量冗余:g <- rep(1,ncol(R))生成了长度为3的向量,但循环里只用到第一个元素,完全没必要用向量,单个变量更简洁。
  3. 图例位置参数冲突:inset=c(0,1)会把图例放到绘图区域外的上方,和你指定的"bottomleft"位置矛盾,导致显示异常。

修正后的完整代码

# 构建概率矩阵
N <- 1
possible <- 0:(2*N)

P <- NULL # 存储概率的向量
for(i in possible){
  P <- c(P, dbinom(possible, size=2*N, prob=i/(2*N)))
}
Q <- matrix(P, ncol=2*N+1, byrow=T)

x <- matrix(c(rep(0,2*N+1)), ncol=2*N+1, byrow=T)
x[,2] <- 1

R <- x %*% Q

color <- c("brown","blue","grey")
shape <- c(15,19,17)

# 绘图部分修正
g <- 1 # 用单个变量记录世代数

# 先初始化空的绘图框架,type="n"表示只画框架不画点
plot(x = 1, y = 0, xlim=c(1,10), ylim=c(0,1),
     ylab="概率", xlab="世代", type="n")
legend("bottomleft",
       legend=c("灭绝", "1个拷贝","固定"),
       col=color, pch=shape,
       xpd=TRUE, bty="n")

while(g <= 10){
  R <- R %*% Q
  points(g, R, col=color, pch=shape)
  g <- g + 1
}

关键修正点说明

  • 用plot(..., type="n")初始化空绘图框架,确保绘图设备被正确激活,后续的points()和legend()才能正常工作。
  • 将g改为单个变量,简化循环逻辑。
  • 移除错误的inset=c(0,1)参数,让图例正常显示在左下角。

内容的提问来源于stack exchange,提问作者Rafa Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:45:32