使用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
问题根源
- 绘图初始化逻辑错误:你把
points()嵌套在plot()里调用,且用x=NULL的方式无法正确创建绘图区域。plot()需要单独调用以初始化绘图框架,之后才能用points()添加数据点,也才能正常使用legend()。 - 世代数变量冗余:
g <- rep(1,ncol(R))生成了长度为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
相关产品推荐
相关产品推荐

