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
相关产品推荐
相关产品推荐

