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

使用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,完全没必要写。

修正步骤及代码

  1. 生成有序无重复的x、y序列
    先提取x、y的唯一值,再排序得到严格递增的向量:

    # 提取唯一值并排序
    x_unique <- sort(unique(x))
    y_unique <- sort(unique(y))
    
  2. 重新定义正确的函数
    直接基于输入的x、y计算函数值,不需要依赖原数据框:

    func <- function(x, y){
      sqrt(x^2 + y^2)
    }
    
  3. 生成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:23:13