R语言绘图脚本运行报need finite 'xlim' values错误求助
R绘图脚本
need finite 'xlim' values报错解决方案
Error in plot.window(...) : need finite 'xlim' values报错的核心原因是绘图函数接收到了非有限值(NA、NaN、正负无穷值),或者输入的绘图向量长度为0。你收到的12条警告大概率是min()/max()计算时遇到缺失值返回NA触发的,最终导致绘图的坐标范围参数非法。
步骤1:校验输入数据合法性
运行以下代码排查数据问题:
# 查看目标列的统计信息,确认是否有NA、Inf summary(wine[,c("V2","V3","V4","V5","V6")]) # 查看每个向量的长度,确认没有空向量 sapply(mylist, length)
如果发现存在空向量,需要先修正数据导入逻辑,保证wine的目标列有有效数据。
步骤2:修改绘图函数,兼容缺失值
原函数的min()/max()没有设置忽略缺失值的参数,只要有一个缺失值就会返回NA,导致坐标范围非法。修改后的函数如下:
makeProfilePlot <- function(mylist,names) { require(RColorBrewer) numvariables <- length(mylist) colours <- brewer.pal(numvariables,"Set1") mymin <- 1e+20 mymax <- 1e-20 for (i in 1:numvariables) { vectori <- mylist[[i]] # 增加na.rm = TRUE参数,计算最值时忽略缺失值 mini <- min(vectori, na.rm = TRUE) maxi <- max(vectori, na.rm = TRUE) if (mini < mymin) { mymin <- mini } if (maxi > mymax) { mymax <- maxi } } for (i in 1:numvariables) { vectori <- mylist[[i]] namei <- names[i] colouri <- colours[i] if (i == 1) { # 绘图时忽略缺失值,避免断点问题 plot(na.omit(vectori), col=colouri, type="l", ylim=c(mymin,mymax)) } else { points(na.omit(vectori), col=colouri, type="l") } lastxval <- length(vectori) # 取最后一个非缺失值作为标注位置 lastyval <- tail(na.omit(vectori), 1) text((lastxval-10),(lastyval),namei,col="black",cex=0.6) } }
可选优化:提前过滤所有缺失值
如果不需要保留缺失值对应的位置,可以在生成mylist时就直接过滤所有空值:
names <- c("V2","V3","V4","V5","V6") mylist <- list( na.omit(wine$V2), na.omit(wine$V3), na.omit(wine$V4), na.omit(wine$V5), na.omit(wine$V6) ) makeProfilePlot(mylist,names)
内容的提问来源于stack exchange,提问作者sacha
相关产品推荐
相关产品推荐

