R에서 3D 그래픽을 만들기 위해 RGL, car, lattice, scatterplot3d 등 많은 패키지가 있습니다. 이 튜토리얼에서는 R 소프트웨어와 패키지 scatterplot3d를 사용하여 3D 공간에서 산점도를 생성하는 방법을 설명합니다. scaterplot3d는 사용이 매우 간편하며 이미 생성 된 그래픽에 보충 점 또는 회귀 평면을 추가하여 쉽게 확장 할 수 있습니다. 설치된 R 버전 만 필요하기 때문에 쉽게 설치할 수 있습니다.

scaterplot3d 설치 및 로드

데이터 준비

iris 데이터 세트가 사용됩니다.

iris 데이터 세트는 iris 3가지 종 각각에서 추출한 50 개의 꽃에 대한 길이와 폭, 꽃잎의 길이와 폭을 측정합니다. 3가지 종은 setosa, versicolor, virginica 입니다.

scatterplot3d () 함수

단순화 된 형식, scatterplot3d(x, y=NULL, z=NULL) 입니다.

x, y, z는 플롯 할 점의 좌표입니다. 인수 y와 z는 x의 구조에 따라 선택적일 수 있습니다. 어떤 경우 y와 z는 선택적 변수일까요?

  • 사례 1 : x는 zvar ~ xvar + yvar 유형의 수식. xvar, yvar 및 zvar는 x, y 및 z 변수로 사용
  • 사례 2 : x는 각각 x, y 및 z 변수에 해당하는 적어도 3 개의 열을 포함하는 행렬

기본 3D 산점도

기본 제목 및 축 레이블 변경

포인트의 모양과 색상 변경

인수 pch 및 color를 사용할 수 있습니다.

R에서 사용할 수있는 여러 포인트 모양은 아래와 같습니다.

그룹별로 점 모양 변경

그룹별로 포인트 색상 변경

그래프의 전체적인 모양 변경

아래의 인수를 사용할 수 있습니다.

  • grid : 논리값. 참이면 그리드가 그려집니다.
  • box : 논리값. TRUE이면, 플롯 주위에 상자가 그려집니다.

 

플롯 주변의 상자 제거

 인수 grid = TRUE는 xy 평면상의 그리드만을 나타냅니다. 다음 섹션에서는 3D scatter 플롯의 다른 패싯에 그리드를 추가하는 방법을 살펴 보겠습니다.

scatterplot3d에 그리드 추가

이 절에서는 scatterplot3d 그래픽에 xy-, xz- 및 yz-을 추가하는 방법을 설명합니다. 여기에선 addgrids3d()라는 커스텀 함수를 사용할 것입니다. 소스코드는 아래 코드에서확인할 수 있습니다.

함수의 간단한 형식은 다음과 같습니다.

addgrids3d(x, y=NULL, z=NULL, grid = TRUE, col.grid = “grey”, lty.grid=par(“lty”))

  • x, y 및 z는 점의 x, y, z 좌표를 지정하는 숫자 벡터입니다. x는 x, y 및 z 좌표에 해당하는 3 개의 열을 포함하는 행렬 또는 데이터 프레임이 될 수 있습니다. 이 경우 인수 y와 z는 선택 사항입니다.
  • grid는 그리드를 그려야하는 플롯의면을 지정합니다. 가능한 값은 “xy”, “xz”또는 “yz”의 조합입니다. 예 : grid = c ( “xy”, “yz”). xy면에만 격자를 추가하려면 기본값은 TRUE입니다.
  • col.grid, lty.grid : 격자에 사용할 색상 및 선 유형 입니다.

scatterplot3d 그래픽의 다른 면에 그리드를 추가하십시오 :

위의 그림에서 문제는 그리드가 점 위에 그려지는 것입니다.

아래의 R 코드는 다음 단계를 사용하여 점을 포 그라운드에 배치합니다. 1. 빈 scatterplot3 그래픽이 만들어지고 scatterplot3d()의 결과가 s3d에 할당됩니다. 2. addgrids3d() 함수는 격자를 추가하는 데 사용됩니다. 3. 마지막으로 함수 s3d$points3d를 사용하여 3D 산점도에 점을 추가합니다.

points3d() 함수는 다음 절에서 설명합니다.

막대 추가

인수 type = “h”가 사용됩니다. 이것은 점의 x-y 위치를 매우 명확하게 볼 때 유용합니다.

scatterplot3d 출력 수정

scatterplot3d는 기존 플롯에 요소를 추가하는데 사용할 수있는 함수 클로저 목록을 반환합니다. 반환된 함수는 다음과 같습니다.

1.xyz.convert(): 3D 좌표를 기존 scatterplot3d의 2D 평행 투영으로 변환. 범례와 같은 임의의 요소를 플롯에 추가하는 데 사용할 수 있음. 2.points3d(): 기존의 플롯에 점이나 선을 추가하는 것 3.plane3d(): 기존의 플롯에 플레인을 추가합니다. 4. box3d() : 플롯 주위에 상자를 추가하거나 새로 고칩니다.

범례 추가

xyz.convert()를 사용하여 범례 위치 지정

  1. scatterplot3d()의 결과는 s3d에 할당됩니다.
  2. 함수 s3d$xyz.convert()는 범례의 좌표를 지정하는데 사용됩니다
  3. 함수 legend()는 플롯에 범례를 추가하는데 사용됩니다

또한 다음 키워드를 사용하여 범례의 위치를 지정할 수도 있습니다. “bottomright”, “bottom”, “bottomleft”, “left”, “topleft”, “top”, “topright”, “right” and “center”.

키워드를 사용하여 범례 위치 지정

inset 인수는 범례가 키워드에 의해 배치될 때 마진과의 거리를 플롯 영역의 일부로 삽입하는 데 사용됩니다. (R의 범례 참조). 음수 또는 양수 값을 사용하여 삽입 된 인수로 재생할 수 있습니다.

키워드를 사용하여 범례 위치를 지정하는 것은 매우 간단합니다. 그러나 때로는 일부 지점과 범례 상자 사이 또는 축과 범례 상자 사이에 겹침이 있습니다. 이 중복을 피하는 해결책은 함수 legend()에 대해 다음 인수를 조합하여 사용하는겁니다.

  1. bty = "n" : 범례 주위의 상자를 제거합니다. 이 경우 범례의 배경색이 투명해지고 겹치는 점이 보입니다.
  2. bg = "transparent" : 범례 상자의 배경색을 투명 색상으로 변경합니다 (bty! = “n”일 때만 가능).
  3. inset : 그림 마진과 범례 상자 사이의 거리를 수정합니다.
  4. horiz : 논리 값; TRUE이면 범례를 세로가 아닌 가로로 설정합니다.
  5. xpd : 논리 값. TRUE이면 범례 항목을 플롯 바깥 쪽에서 그릴 수 있습니다.

범례 위치 사용자 정의

위의 R 코드에서 inset, xpdhoriz 인수를 사용하여 범례 상자의 모양에 미치는 영향을 확인할 수 있습니다.

포인트 레이블 추가

함수 text ()는 다음과 같이 사용됩니다.

회귀 평면 및 보충점 추가

scatterplot3d()의 결과는 s3d에 할당됩니다.

  1. 선형 모델은 다음과 같이 계산됩니다. lm(zvar ~ xvar + yvar). 가정 : zvar은 xvar와 yvar에 의존합니다.
  2. s3d$plane3d() 함수는 회귀 평면을 추가하는 데 사용됩니다.
  3. 보충 점은 s3d$points3d() 함수를 사용하여 추가됩니다.

데이터 세트는 trees가 사용됩니다.

이 데이터 세트는 검은 벚나무의 둘레, 높이 및 부피를 측정합니다.

회귀 평면이있는 3D 산점도

참조: Scatterplot3d: 3D graphics – R software and data visualization

(Visited 59 times, 1 visits today)