(x,y,z) 좌표에서 3D 표면 플롯 만들기
Jesse John
2023년1월30일
Base R과 여러 패키지는 수평면 위에 3차원 표면을 그리는 기능을 제공합니다. 대부분 x
및 y
값의 모든 조합에 대해 z
값이 입력으로 필요합니다.
즉, 그리드의 각 점에 대해 x-y
그리드와 z
값이 필요합니다.
(x,y,z)
값(좌표)의 데이터 프레임이나 행렬이 있을 때 점을 그릴 수 있지만 표면은 그릴 수 없습니다.
주어진 데이터와 표면을 플롯하기 위한 적절한 보간 기능을 사용하여 x
및 y
값의 모든 조합에 대한 z
값을 추정해야 합니다.
이 기사는 akima
패키지를 사용하여 x-y
값 그리드의 z
값을 추정하는 방법을 보여줍니다. 그런 다음 rgl
패키지를 사용하여 표면을 플로팅합니다.
R에서 akima
패키지의 interp()
기능
akima
패키지는 이변량 데이터의 보간 기능을 제공합니다.
interp()
함수는 x
, y
및 z
벡터 세 개를 사용하고 해당 z
값과 함께 x-y
값의 40x40 그리드를 반환합니다.
기본적으로 선형 보간이 생성됩니다.
R에서 rgl
패키지의 persp3d()
기능
rgl
패키지는 3D 대화형 그래픽을 만듭니다. 마우스를 사용하여 플롯을 확대/축소하고 회전할 수 있습니다.
persp3d()
함수를 사용하여 표면을 플롯하고 points3d()
함수를 사용하여 원본 데이터를 플롯합니다.
R에서 플롯을 보려면 options(rgl.printRglwidget = TRUE)
라는 특정 옵션을 설정해야 합니다.
기능 시연
다음 단계를 거치게 됩니다.
-
필요한 패키지가 아직 없는 경우 설치합니다.
-
필요한 패키지를 로드합니다.
-
샘플 데이터 프레임을 만듭니다.
-
interp()
를 사용하여x-y
값 그리드에 해당하는z
값 목록을 만듭니다. -
persp3d()
를 사용하여 표면을 플로팅합니다. -
points3d()
를 사용하여 점을 추가합니다.
예제 코드:
# INSTALL AND LOAD THE PACKAGES.
# Uncomment and run the concerned line to install the package.
#install.packages("akima")
library(akima)
#install.packages("rgl")
library(rgl)
# CREATE THE SAMPLE DATA.
set.seed(1)
x=rnorm(50)
set.seed(2)
y=rnorm(50)
z=c(rep(5,5),rep(-10,5), rep(3,15), rep(20,5), seq(5,15, length.out=10), rep(0,5), rep(3,5))
XYZ=data.frame(x,y,z)
# INTERPOLATE THE Z VALUES.
a_mat=interp(XYZ$x, XYZ$y, XYZ$z)
# PLOT THE SURFACE AND THE POINTS.
options(rgl.printRglwidget = TRUE)
persp3d(a_mat$x, a_mat$y, a_mat$z, col="yellow")
points3d(x,y,z, col="red")
출력 플롯:
‘rgl’은 대화형 3D 플롯을 생성합니다.
작가: Jesse John