使用R语言persp()函数绘制3D曲面图时遇递增变量要求错误求助
解决R语言3D曲面图报错"increasing x and y values expected"的问题
错误原因
persp()函数要求输入的x、y向量必须是严格递增且无重复的序列,你当前的x和y不仅存在重复值(比如x里有两个2、两个4),而且是乱序的,这就触发了报错。另外你的func函数逻辑也有问题:df$f是长度为10的向量,而outer()会生成10×10的矩阵,维度不匹配;而且(x-x + y-y)本质是0,完全没必要写。
修正步骤及代码
生成有序无重复的x、y序列
先提取x、y的唯一值,再排序得到严格递增的向量:# 提取唯一值并排序 x_unique <- sort(unique(x)) y_unique <- sort(unique(y))重新定义正确的函数
直接基于输入的x、y计算函数值,不需要依赖原数据框:func <- function(x, y){ sqrt(x^2 + y^2) }生成z矩阵并绘图
用处理后的有序x、y生成z矩阵,再调用persp():z <- outer(x_unique, y_unique, func) persp(x_unique, y_unique, z, main="Perspective Plot of sqrt(x²+y²)", zlab = "Height", theta = 30, phi = 15, col = "springgreen", shade = 0.5, ltheta = 120, ticktype = "detailed")
完整修正代码
x <- c(-1, 2, 15, 0, 1, 4, 7, 4, 5, 2) y <- c(1.5, 3, 7, 2, 1.5, 15, 12, 8, 20, 21) # 处理x、y为有序无重复序列 x_unique <- sort(unique(x)) y_unique <- sort(unique(y)) # 定义正确的函数 func <- function(x, y){ sqrt(x^2 + y^2) } # 生成z矩阵 z <- outer(x_unique, y_unique, func) # 绘图 persp(x_unique, y_unique, z, main="Perspective Plot of sqrt(x²+y²)", zlab = "Height", theta = 30, phi = 15, col = "springgreen", shade = 0.5, ltheta = 120, ticktype = "detailed")
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

