본문 바로가기
R 주제/R 기초 및 통계 강의

[R강의] 111. 산점도 그래프 회전

by 만다린망고 2021. 5. 26.
반응형

 

 

산점도 그래프를 회전하는 방법에 대해 알아봅시다. 아래 그래프를 그려볼 것입니다. 상관분석 예시 그림을 만들때 사용하였습니다. 

 

 

먼저 정규분포 함수에서 임의추출하여 x와 y를 생성합니다. 

 

#데이터 
x=rnorm(1000,10,3) 
y=rnorm(1000,10,1) 

그래프로 그려보면 아래와 같습니다. 의도적으로 상하방향이 납작하게 설정하였습니다. 표준편차를 작게 해주면 됩니다. 

 

#데이터
x=rnorm(1000,10,3)
y=rnorm(1000,10,1)

#plot
plot(x,y,xlim=c(0,20),ylim=c(0,20),main="0deg")

 

 

회전하기 위해 회전행렬을 정의합니다. (a,b)를 $\theta$ 만큼 회전한 점 (a',b')를 구하는 방법은 아래와 같습니다. 

 

$\begin{bmatrix} 
a'\\  
b' 
\end{bmatrix} 

\begin{bmatrix} 
cos(\theta) & -sin(\theta) \\  
sin(\theta) & cos(\theta)  
\end{bmatrix} 
\begin{bmatrix} 
a\\  

\end{bmatrix}$

 

수학적 원리는 링크를 참고해주세요. 

 

데이터를 45도 회전하는 코드는 아래와 같습니다. (10,10)을 중심으로 회전하였습니다. x,y를 하나의 행렬로 만들어 준 뒤, 10을 빼주었습니다. 10을 빼준 이유는 10,10을 원점으로 만들어 회전시키기 위함입니다. 회전행렬을 정의하고 곱해주었습니다. 회전한 뒤에 다시 10을 더해주었습니다. (이 내용도 수학적 원리를 설명한 링크에 나옵니다.)

 

#데이터
x=rnorm(1000,10,3)
y=rnorm(1000,10,1)

#45deg 도 회전
data=rbind(x,y)-10
theta=pi/4
RotMat=matrix(c(cos(theta),sin(theta),-sin(theta),cos(theta)),nrow=2)
data_rot1=RotMat %*% data
data_f1=data_rot1+10

 

마찬가지 방법으로 -45도 회전시킨 데이터를 만들고. 각각 그래프를 그려주었습니다. 전체코드는 아래와 같습니다. 

 

#데이터
x=rnorm(1000,10,3)
y=rnorm(1000,10,1)

#45deg 도 회전
data=rbind(x,y)-10
theta=pi/4
RotMat=matrix(c(cos(theta),sin(theta),-sin(theta),cos(theta)),nrow=2)
data_rot1=RotMat %*% data
data_f1=data_rot1+10

#-45deg 도 회전
data=rbind(x,y)-10
theta=-pi/4
RotMat=matrix(c(cos(theta),sin(theta),-sin(theta),cos(theta)),nrow=2)
data_rot2=RotMat %*% data
data_f2=data_rot2+10

#plot
par(mfrow=c(1,3))
plot(x,y,xlim=c(0,20),ylim=c(0,20),main="0deg")
plot(data_f1[1,],data_f1[2,],xlab='x',ylab='y',xlim=c(0,20),ylim=c(0,20),main="45deg")
plot(data_f2[1,],data_f2[2,],xlab='x',ylab='y',xlim=c(0,20),ylim=c(0,20),main="-45deg")

 

 

 

반응형

댓글