투시도(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
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.