더북(TheBook)

투시도(persp), 등고선 그래프(contour)

투시도는 3차원 데이터를 마치 투시한 것처럼 그린 그래프며, 등고선 그래프는 높이가 같은 곳을 선으로 연결한 그래프다. 좌표로 말하자면 이들은 x, y, z 값을 그려주는 그래프로, z=f(x, y)처럼 z 값이 x, y에 따라 정해지는 값일 때 (x, y)에 따라 z가 어떻게 변하는지를 한눈에 보여준다.

표 6-30 투시도와 등고선 그래프

persp : 투시도를 그린다.

persp(
  # x, y, z에 대한 투시도를 그린다. x, y의 기본값은 z의 행, 열 개수만큼
  # 0, 1 사이에 찍은 균일한 점들이다.
  x=seq(0, 1, length.out=nrow(z)),
  y=seq(0, 1, length.out=ncol(z)),
  z,
  # theta phi는 그래프를 얼마나 돌려서 표시할지를 지정한다. 각각 방위각과 여위도를 의미하며,
  # 쉽게 말해 theta는 그래프를 얼마나 좌우로 회전시킬지를, phi는 그래프를 얼마나 상하로
  # 회전시킬지를 의미한다.
  theta = 0,
  phi = 15,
  ...
)

contour : 등고선 그래프를 그린다.

contour(
  # x, y, z에 대한 등고선 그래프를 그린다. x, y의 기본값은 z의 행, 열 개수만큼
  # 0, 1 사이에 찍은 균일한 점들이다.
  x=seq(0, 1, length.out=nrow(z)),
  y=seq(0, 1, length.out=ncol(z)),
  z,
  ...
)

outer : 배열의 외적(outer product)을 구한다.

outer(
  X,       # 벡터 또는 배열
  Y,       # 벡터 또는 배열
  fun="*", # 계산에 사용할 함수
  ...      # fun에 추가로 넘겨줄 또 다른 인자들
)

outer(X, Y) 반환 값의 차원은 c(dim(X), dim(Y))며, 반환 값의 각 원소에 대해 A[c(index.x, index.y)] = FUN(X[index.x], Y[index.y])다.

persp( ), contour( )에서 유용한 함수가 outer( )다. 이 함수를 사용하면 z = f(x, y)의 함수 관계가 있을 때 z를 손쉽게 계산할 수 있다. 예를 들어, x=1:5, y=1:3일 때 모든 x, y 조합에 대해 x + y를 계산해보자.

> outer(1:5, 1:3, "+")
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    3    4    5
[3,]    4    5    6
[4,]    5    6    7
[5,]    6    7    8

위 예에서 outer( )의 결과는 행렬이며, 이 행렬의 (m, n)에는 m + n 값이 저장되어 있음을 볼 수 있다.

fun에는 R 함수를 기술해도 된다.

> outer(1:5, 1:3, function(x, y) { x + y })
     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    3    4    5
[3,]    4    5    6
[4,]    5    6    7
[5,]    6    7    8
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.