본문 바로가기
기본적인프로그래밍/R

[R] 쉽게 배우는 R programming 기초 (5) (그래프, plot, 기타 parameter)

by 인포메틱스 2020. 6. 30.
반응형

오늘은 R에서 기본적인 것들 중에 plotting에 대해서 간단하게 설명하도록하겠습니다.

 

R의 plot은 BI 혹은 분석하시는 분들에게는 없어서는 안될 기능입니다.

 

R에서 plot기능이 없었다면, 이빨빠진 호랑이에 불가하다고 생각합니다. 많은 패키지들에서 이러한 plot이 필수적으로 들어가는 만큼 R에서 plot은 중요합니다.

 

이번 시간에는 정말 기본적인 plot을 만드는 방법을 소개하겠습니다.

 

생각보다 기본적인 plot이 다채롭게 사용될수도 있고, 항상 이야기하지만, 기본이 가장 중요합니다. 

 

급하게 그래프를 그려야하는데, 원하는 그래프를 그리는 패키지는 내가 갖고있는 컴퓨터에서 잘 설치가 안되네? 이럴때를 대비해서 기본적인 plot에 대해 잘 알아둬야 할 것입니다.

 

연구나, 분석에 주로 사용되는 ggplot2의 경우 기본적인 개념이 끝난 후 아예 카테고리로 만들어 설명하도록하겠습니다.

 

 


 

 

아주 기본적인 scatter plot을 그려보도록 하죠.

 

> plot(1,1)
> 

짠!

 

 

다음과 같이 그래프가 생겼습니다. 

 

plot(1,1)은 무엇을 의미하는지 그림만 봐도 알겠죠?! x,y=(1,1)인 경우에다 점을 똬 찍은거죠.

 

plot에 대해 설명을 전체적으로 진행하겠습니다. help(plot)을 치면 나오는 내용입니다.

 

- x,y = 각각 x,y값들을 받는다.

- type

'p' = 점찍기 (default, 기본)

'l' = 선긋기

'b' = 듈다

'c' = 'b'에서 line만 보이기

'o' = 점에서 점까지 line긋기

'h' = histogram화 시키기

's' = 계단화 

'S' = 's'의 반대 개념

'n' = 아무것도 안넣기

- main = 제목

- sub = 부제목

- x,ylab = x,y축이름 (xlab,ylab따로 지정)

- asp = x,y사이의 비율로 그리기

- etc 이밖에도 많은 기능들을 적용시킬 수 있음. 

 

help(par)라는 것을 쳐보면 사용할수있는 parameter가 나옴. (모두 나오지는 않음)

 

예시 몇 개를 올리겠습니다. 예시 올리면서 위에 없던 parameter들은 제가 따로 그림아래에 설명해놓겠습니다.

 

> par(mfrow=c(3,3))
> par(mar=c(5,4,3,1),oma=c(1,1,1,1))
> x=c(1,2,3,4,5)
> y=c(-1,-2,-3,-4,-5)
> plot(x=x,y=y,main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = p')
> plot(x=x,y=y,type='b',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = b')
> plot(x=x,y=y,type='l',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = l')
> plot(x=x,y=y,type='o',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = o')
> plot(x=x,y=y,type='c',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = c')
> plot(x=x,y=y,type='s',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = s')
> plot(x=x,y=y,type='h',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = h')
> plot(x=x,y=y,type='S',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = S')
> plot(x=x,y=y,type='n',main='Basic plot',xlab='x-value',ylab='y-value',sub = 'type = n')
>

par = plot에서 parameter로서 그림그릴때 조정을 해주는 기능들입니다.

mfrow = 한면에 행열로 나누어 그래프를 그릴수있도록 처음 설정하는 기능입니다. 위에서는 3X3 그래프를 그리기위해서 저렇게 사용하였습니다.

mar = margin 으로 안에는 (bottom, left, top, right)순으로 들어갑니다. 그 그림 안쪽을 기준으로 사이 공간을 이야기합니다. (말로만 설명해서 안되니 다음 포스팅때 정리하도록 하겠습니다.) 

oma = outer margins로 들어가는 값들은 mar와 동일하게 들어가며, mar보다는 더 외부쪽과의 사이값을 나타냅니다.

 

위의 결과 다음과 같은 값들을 확인할 수가 있습니다.

 

또 다른 예시를 들어보도록 하겠습니다.

 

 

> par(mfrow=c(2,2))
> par(mar=c(5,4,3,1),oma=c(1,1,1,1))
> y=c(-1,-2,-3,-4,-5)
> x=c(1,2,3,4,5)
> plot(x,y)
> grid()
> plot(x,y,xaxs='i',yaxs='i') #x,yaxs = 'r' 가 default
> plot(x,y,xaxs='i',yaxs='i')
> grid()
> plot(x,y,xaxs='i',yaxs='i')
> grid()
> box()
> 

xaxs = default인 'r'인 경우 시작점이 0을 기준이 아니라 약간 더 넓은 값범위를 나타냄 'i'의 경우 딱 0부터 시작.

grid = grid의 경우 plot과 마찬가지로 x,y 값을 받는다. x축에 몇줄, y축에 몇줄 이런 기준임.

box = 테두리를 다시 쳐주는 것임.

 

다음과 같이 결과가 나왔습니다. 위의 코드를 보면서 비교해보세요!

 

또 다른 예시 들어갑니다.

 

> par(mfrow=c(2,2))
> par(mar=c(5,4,3,1),oma=c(1,1,1,1))
> x=c(1,2,3,4,5)
> y=c(-1,-2,-3,-4,-5)
> plot(x,y,bty='n',xaxt='n',yaxt='n')
> grid()
> plot(x,y,bty='n',xaxt='n',yaxt='n')
> grid()
> axis(side = 2,at = c(-5,-4,-3,-2))
> plot(x,y,bty='n',xaxt='n',yaxt='n')
> grid()
> axis(side = 2,at = c(-5,-4,-3,-2),labels = c('O','M','G','F'))
>

bty = 상자의 plot을 없애는 것입니다.

x,yaxt = x,y축의 표현되는 값들을 조절하는 기능을 합니다. axes =F로도 가능

axis = 축을 설정할 수 있는 기능을 합니다. (side의 값은 mar의 인풋 순서와 같음, (bottom, left, top, right))

 

다음과 같이 결과가 나왔습니다.

 

마지막 예시! 이거먼저 했어야 하는데, 제가 항상 해메고 있던 것 먼저 하느라. 늦었네요.

 

> par(mfrow=c(2,2))
> par(mar=c(5,4,3,1),oma=c(1,1,1,1))
> x=c(1,2,3,4,5)
> y=c(-1,-2,-3,-4,-5)
> plot(x,y,main='Basic plot')
> plot(x,y,xlim = c(0,10),ylim = c(0,-10),main='Basic plot')
> plot(x,y,xlim = c(0,10),ylim = c(0,-10),main='Basic plot',cex.main=2,cex.lab=2)
> plot(x,y,xlim = c(0,10),ylim = c(0,-10),main='Basic plot',cex=2)
> 

cex = 크기를 조절해주는 기능을 합니다.

x,ylim = x,y축 범위를 확인할 수 있습니다.

 

다음과 같이 그래프가 그려졌습니다.

위 코드와 잘 비교해서 확인해보세요!

 


 

오늘은 여기까지 진행하도록 하겠고, 다음 포스팅도 plot관련되서 진행하도록 하겠습니다.!

 

감사합니다.

728x90
반응형

댓글