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

R语言3D散点图着色问题求助:按函数值为空间点上色报错

问题描述

想要创建基于x、y、z坐标的3D散点图,用conc1函数计算的值作为点的颜色,尝试的代码如下:

#declaration of some parameters of function "conc1"
Q<-1
t<-0
sx<-sy<-sz<-1
#coordinates of points
x<-seq(-3,3,length=100)
y<-seq(-3,3, length=100)
z<-seq(-3,3,length=100)
#function
conc1<-function(x,y,z){(Q/(sqrt(8*pi^3)*sx*sy*sz))*exp(-((x-u*t)^2/2*sx^2)-(y^2/2*sy^2)-(z^2/2*sz^2))}
#ploting a function conc1
scatter3D(x, y, z, colvar = conc1, ...)

运行后出现错误:

Error in scatter3D(x, y, z, colvar = conc1, pch = 19, cex = 0.5) :
'colvar' should have same length as 'x', 'y' and 'z'
In addition: Warning message:
In is.na(var) : is.na() applied to non-(list or vector) of type 'closure'

解决步骤
  • 修正colvar参数传入方式
    scatter3D的colvar要求传入数值向量,而非函数本身。你需要先生成所有x、y、z的三维网格组合点,再调用conc1计算每个点对应的数值,得到与x、y、z长度一致的向量后传入colvar。

  • 补充未定义的变量u
    原函数conc1中用到了u*t,但代码里未声明u的值,需要先定义该变量。

  • 修正函数内的公式运算顺序
    原函数里的(x-u*t)^2/2*sx^2运算顺序错误,应该改为(x-u*t)^2/(2*sx^2),否则会导致计算逻辑偏离预期。

  • 完整修正代码

# 声明参数
Q <- 1
t <- 0
u <- 0  # 可根据实际需求修改u的取值
sx <- sy <- sz <- 1

# 生成三维网格坐标组合
grid <- expand.grid(x = seq(-3,3,length=100), 
                    y = seq(-3,3, length=100), 
                    z = seq(-3,3,length=100))
x <- grid$x
y <- grid$y
z <- grid$z

# 定义修正后的函数
conc1 <- function(x,y,z){
  (Q/(sqrt(8*pi^3)*sx*sy*sz)) * 
    exp(-((x - u*t)^2/(2*sx^2)) - (y^2/(2*sy^2)) - (z^2/(2*sz^2)))
}

# 计算每个点的颜色对应值
col_vals <- conc1(x, y, z)

# 绘制3D散点图
scatter3D(x, y, z, colvar = col_vals, pch = 19, cex = 0.5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:40:38