R에서 3D 투시도 만들기

Jesse John 2023년1월30일
  1. R의 persp() 함수 인수
  2. R의 평면도
  3. R의 행렬에서 플롯
R에서 3D 투시도 만들기

기본 R의 persp() 함수를 사용하여 표면의 투시도를 만들 수 있습니다. 표면은 (x,y) 값의 모든 쌍에 해당하는 z 값을 통과합니다.

persp() 함수를 사용하려면 주요 인수의 형식을 이해해야 합니다. 이 기사의 나머지 부분에서는 간단한 예를 통해 이를 설명하고 설명합니다.

R의 persp() 함수 인수

persp()가 3차원으로 플롯되므로 3개의 좌표에 대해 x, yz 인수가 세 개 있습니다.

  1. xy는 숫자 벡터입니다. 오름차순이어야 합니다.

  2. z 인수는 행렬을 취합니다. 이 행렬에는 xy의 각 조합에 해당하는 z 값이 하나만 있어야 합니다.

    플롯된 표면은 모든 z 값을 통과합니다.

z에 대한 행렬을 만드는 한 가지 방법은 outer() 함수를 사용하여 xy 값의 모든 조합에 이변량 함수를 적용하는 것입니다.

기본적으로 persp() 함수는 y축의 음수 측면에서 보기를 표시합니다.

  1. phi 인수는 colatitude를 제공합니다. phi를 0도에서 90도로 변경하면 전면에서 상단으로의 뷰 변경에 영향을 줍니다.
  2. theta 인수는 방위각을 제공합니다. theta를 0도에서 90도로 변경하면 그림을 수직 축을 중심으로 시계 방향으로 회전시키는 효과가 있습니다.

R의 평면도

이제 두 개의 평면을 만들고 다른 각도에서 볼 것입니다. 첫 번째는 수평면입니다.

예제 코드:

# A function that gives a constant z value.
H = function(x, y){
  return (0*x+0*y+1)
}

X = seq(-1,1,length.out=5)
Y = seq(-1,1, length.out=5)

# Apply the H function to all pairs (x,y).
# This gives the z matrix.
Z = outer(X, Y, H)

# Four different views.
persp(x=X,y=Y,z=Z, theta=0, phi=0, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=0, phi=45, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=0, phi=90, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=45, phi=45, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))

출력 수치:

수평면 플롯

4개의 그림은 thetaphi 각도를 변경할 때의 효과를 보여줍니다.

다음으로 경사면을 살펴보겠습니다. 구문은 또한 다른 persp() 함수 인수를 설정하는 방법을 보여줍니다.

예제 코드:

# A function for a plane.
O = function(x, y){
  return (2*x+3*y-2)
}

X1 = seq(-2,2,length.out=15)
Y1 = seq(-2,2, length.out=15)

# Apply the function to all combinations of x and y.
Z1 = outer(X1, Y1, O)

# Check the range of the values of Z.
# This will help create the limits for the box.
range(Z1)

# Because we do not use the scale=FALSE argument, the output is a cube.
# The axes are scaled.
persp(x=X1,y=Y1,z=Z1, theta=20, phi=10, xlim=range(-5,5), ylim=range(-5,5), zlim=range(-12,8),
      xlab="x-axis",
      ylab="y-axis",
      zlab="z-axis",
      main="Oblique Plane",
      col="#00FFFF",
      ticktype="detailed",
      nticks=3)

# With scale=FALSE.
persp(x=X1,y=Y1,z=Z1, theta=-15, phi=5, xlim=range(-5,5), ylim=range(-5,5), zlim=range(-12,8),
      scale = FALSE,
      xlab="x-axis",
      ylab="y-axis",
      zlab="z-axis",
      main="Oblique Plane",
      col="#FF00FF",
      ticktype="detailed",
      nticks=3)

출력 수치:

비스듬한 평면의 플롯

R의 행렬에서 플롯

persp() 함수는 xy 벡터에 해당하는 z 값의 행렬에서 오름차순으로 플롯할 수 있습니다.

z의 행 및 열 수는 각각 xy의 길이와 일치해야 합니다.

예제 코드:

# Manually create a matrix of z values corresponding
# to all combinations of some x and y.
# (Or use such a pre-existing matrix.)
Z2 = matrix(data=c(1,1,1,1,1,
                  1,-1,-1,-1,1,
                  1,-1,3,-1,1,
                  1,-1,-1,-1,1,
                  1,1,1,1,1), ncol=5)

X2 = seq(-4, 4, length.out=5)
Y2 = seq(-2, 2, by=1)

persp(x=X2, y=Y2, z=Z2, scale=FALSE, col="#CBD68A", theta=30, phi=15)

출력 수치:

행렬에서 플롯

작가: 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