从 R 中的 2D 函数绘制 3D 线性曲面
Plot a 3D linear surface from 2D functions in R
我有以下数据:
x <- c(1000,2000,3000,4000,5000,6000,8000,12000)
y_80 <- c(33276,33276,5913,2921,1052,411,219,146)
y_60 <- c(14724,14724,3755,1958,852,372,211,140)
y_40 <- c(9632,9632,2315, 1250,690,332,196,127)
y_20 <- c(4672,4672,1051,562,387,213,129,81)
y_5 <- c(825,825,210,118,88,44,27,17)
根据这些数据,我创建了 5 个样条函数:
f_80 <- splinefun(x, y_80, method=c("monoH.FC"))
f_60 <- splinefun(x, y_60, method=c("monoH.FC"))
f_40 <- splinefun(x, y_40, method=c("monoH.FC"))
f_20 <- splinefun(x, y_20, method=c("monoH.FC"))
f_5 <- splinefun(x, y_5, method=c("monoH.FC"))
Z轴是f_后面的数字,即函数f_80的Z值是80等等。
我需要做的是根据这些函数绘制 3D 表面,并在线条之间进行线性插值。这在 R 中可能吗?
我已经有 SO 类似的问题,但我找不到答案。谢谢
有多种 R 伪 3d 绘图功能。 base-graphics有persp
,wireframe
在Lattice,最酷的是,surface3d
在rgl。它们在处理轴参数的方式上有所不同,但它们通常都接受 z 值的矩阵参数。 `persp 是最简单的:
z_80 <- f_80(x)
z_60 <- f_60(x)
z_40 <- f_40(x)
z_20 <- f_20(x)
z_5 <- f_5(x)
png(); persp(matrix(c(z_80, z_60, z_40, z_20, z_5 ), nrow=length(x),
dimnames= list(X=x, Y=c(80,60,40,20,5) ) ) )
dev.off()
您可能会发现使用 ticktype="detailed"
可以提供更多信息:
png(); persp(matrix(c(z_80,z_60,z_40,z_20,z_5 ), nrow=length(x),
dimnames=list(X=x, Y=c(80,60,40,20,5) ) ) ,
ticktype="detailed", xlab="X axis", ylab="Y axis",
zlab=". Z= f(y)", theta=45) ; dev.off()
我通常需要玩视角 theta 来获得我喜欢的东西。让 z 轴标签远离长 z-tick-labels 是一个 hack。
我有以下数据:
x <- c(1000,2000,3000,4000,5000,6000,8000,12000)
y_80 <- c(33276,33276,5913,2921,1052,411,219,146)
y_60 <- c(14724,14724,3755,1958,852,372,211,140)
y_40 <- c(9632,9632,2315, 1250,690,332,196,127)
y_20 <- c(4672,4672,1051,562,387,213,129,81)
y_5 <- c(825,825,210,118,88,44,27,17)
根据这些数据,我创建了 5 个样条函数:
f_80 <- splinefun(x, y_80, method=c("monoH.FC"))
f_60 <- splinefun(x, y_60, method=c("monoH.FC"))
f_40 <- splinefun(x, y_40, method=c("monoH.FC"))
f_20 <- splinefun(x, y_20, method=c("monoH.FC"))
f_5 <- splinefun(x, y_5, method=c("monoH.FC"))
Z轴是f_后面的数字,即函数f_80的Z值是80等等。
我需要做的是根据这些函数绘制 3D 表面,并在线条之间进行线性插值。这在 R 中可能吗? 我已经有 SO 类似的问题,但我找不到答案。谢谢
有多种 R 伪 3d 绘图功能。 base-graphics有persp
,wireframe
在Lattice,最酷的是,surface3d
在rgl。它们在处理轴参数的方式上有所不同,但它们通常都接受 z 值的矩阵参数。 `persp 是最简单的:
z_80 <- f_80(x)
z_60 <- f_60(x)
z_40 <- f_40(x)
z_20 <- f_20(x)
z_5 <- f_5(x)
png(); persp(matrix(c(z_80, z_60, z_40, z_20, z_5 ), nrow=length(x),
dimnames= list(X=x, Y=c(80,60,40,20,5) ) ) )
dev.off()
您可能会发现使用 ticktype="detailed"
可以提供更多信息:
png(); persp(matrix(c(z_80,z_60,z_40,z_20,z_5 ), nrow=length(x),
dimnames=list(X=x, Y=c(80,60,40,20,5) ) ) ,
ticktype="detailed", xlab="X axis", ylab="Y axis",
zlab=". Z= f(y)", theta=45) ; dev.off()
我通常需要玩视角 theta 来获得我喜欢的东西。让 z 轴标签远离长 z-tick-labels 是一个 hack。