(x,y,z) 좌표에서 3D 표면 플롯 만들기

Jesse John 2023년1월30일
  1. R에서 akima 패키지의 interp() 기능
  2. R에서 rgl 패키지의 persp3d() 기능
  3. 기능 시연
(x,y,z) 좌표에서 3D 표면 플롯 만들기

Base R과 여러 패키지는 수평면 위에 3차원 표면을 그리는 기능을 제공합니다. 대부분 xy 값의 모든 조합에 대해 z 값이 입력으로 필요합니다.

즉, 그리드의 각 점에 대해 x-y 그리드와 z 값이 필요합니다.

(x,y,z) 값(좌표)의 데이터 프레임이나 행렬이 있을 때 점을 그릴 수 있지만 표면은 그릴 수 없습니다.

주어진 데이터와 표면을 플롯하기 위한 적절한 보간 기능을 사용하여 xy 값의 모든 조합에 대한 z 값을 추정해야 합니다.

이 기사는 akima 패키지를 사용하여 x-y 값 그리드의 z 값을 추정하는 방법을 보여줍니다. 그런 다음 rgl 패키지를 사용하여 표면을 플로팅합니다.

R에서 akima 패키지의 interp() 기능

akima 패키지는 이변량 데이터의 보간 기능을 제공합니다.

interp() 함수는 x, yz 벡터 세 개를 사용하고 해당 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 플롯을 생성합니다.

3D 투시도

작가: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

관련 문장 - R Plot