[R] 막대그래프 그리기(barplot)

반응형
반응형

barplot 함수는 x축의 범주 대비 수치형 데이터를 막대의 길이로써 시각화하는 막대그래프를 출력해주는 함수입니다.
히스토그램과 굉장히 유사하지만 다른 점이 있습니다.

barplot과 히스토그램의 차이점

각 차이점은 크게 세가지 정도로 나눌 수 있을 것 같습니다.

  막대그래프 히스토그램
x축 값이 연속적이지 않아도 됨 연속적이고 분할 가능한 값만 적용가능
y축 각 값의 크기 계급의 도수(범위의 해당하는 변량수)
막대위치 막대가 떨어져있음 막대가 붙어있음

막대그래프 그리기

barplot함수의 파라미터는 히스토그램보다 적습니다.
주요 파라미터는 다음과 같습니다.

  • height : 벡터 입력시 각 막대의 높이, 행렬 입력시 열의 개수 만큼 막대 생성, 행의 값의 누적이 막대의 높이
  • xlab : x축 제목
  • ylab : y축 제목
  • main : 그래프의 제목 지정
  • legend : 범례 넣기
  • names : 각 막대의 라벨을 정하기
  • width : 각 막대의 상대적인 폭 정하기
  • space : 막대 사이의 간격
  • beside : TRUE - 각각의 값마다 막대를 그리기(그룹별로 묶기)
  • horiz : 축 바꾸기(FALSE 디폴트)
  • angle : 막대를 칠하는 선분의 각도
  • density : 막대를 칠하는 선분의 수
  • col : 선분의 색 정하기

기본 그래프

barplot은 barplot(height,옵션), barplot(formula,data,옵션) 2가지 방식으로 입력합니다.
barplot(height,옵션)은 대상이 벡터와 행렬일 때만 가능합니다.
barplot(formula,data,옵션)은 모든 대상이 가능한데 기본적인 원리는 y~x로 객체를 연결합니다. 일반적으로 y값은 height을 나타내고 x값은 범주를 나타냅니다.
따라서, y은 수치형데이터, x는 범주형 데이터를 넣어주어야 합니다.

벡터

벡터하나만 있으면 아무런 옵션없이 막대그래프를 간단하게 만들 수 있습니다.

v = c(1,2,3,4,5)
barplot(v)

x축에 이름을 달아주어야 하는데 그건 names 파라미터에 입력하면 됩니다. 또는 fomula 방식으로 v~name 으로 써도 그려집니다.

name = c('1반','2반','3반','4반','5반')
barplot(v,names=name) # barplot(v~name)

행렬

행렬인 경우에는 특별한 옵션을 넣지 않으면 막대그래프가 누적그래프로 만들어집니다. 열의 합계를 볼 수 있습니다.

m = matrix(1:16,nrow=4)
ncol(m)
barplot(m)

행의 합계로 표현하고 싶다면 transpose를 시킨후 그래프를 그립니다.

tm=t(m)
barplot(tm)

누적이 아닌 그룹별로 각각 보고 싶다면 beside=T를 입력합니다.

barplot(m,beside=T)

데이터프레임

데이터프레임을 막대그래프로 표현하려면 height만 입력해서는 나오지 않습니다.
물론 $column 으로 따로 컬럼을 뽑아낸다면 벡터로 인식하기 때문에 할 수 있기는 합니다. 이 방법은 위에서 보인 방법대로 하면 되므로 생략하겠습니다.
y~x 방식으로 그려내는것이 일반적입니다.

v2 = 2*v
df = data.frame(v,v2,name)
barplot(v2~name,data=df)

막대그래프로 그리려는 컬럼과 범주를 담당할 컬럼네임을 지정해 막대그래프를 그립니다.

이번에는 데이터프레임 안에서 그룹별로 그리고자 한다면 다음과 같이 합니다. col을 선택해주면 명확하게 구분해서 나오게 됩니다. color 팔레트는 파이썬의 seaborn에 내장되어 있기도 한 color brewer가 내장되어 있으므로 원하는 팔레트를 가져오면 됩니다.
팔레트에 대한 자세한 내용은 다음 포스팅을 참조하시면 좋을 것 같습니다.
[Python] seaborn color 팔레트

# 데이터프레임 만들기
class1 = c(100,45,80,75,30)
class2 = c(70,80,60,50,40)
class3 = c(40,50,60,70,80)
class4 = c(10,25,100,70,35)
class5 = c(60,55,55,45,35)
df = data.frame('class1'=class1,'class2'=class2,'class3'=class3,'class4'=class4,'class5'=class5)
# 막대그래프 그리기
barplot(as.matrix(df),beside=T,col=rainbow(5))
legend('topright',dimnames(df)[[1]],cex=0.8,fill=rainbow(5))

마치며

나머지 파라미터는 직접 코드를 쳐보면서 확인해보시거나 히스토그램과 같은 파라미터(density, angle,xlab,ylab 등)은 히스토그램 포스팅에 작성되어 있으니 살펴보시면 좋을 것 같습니다. 같은 막대류(?)라서 똑같이 작동합니다.

 

관련 포스팅
[R] 히스토그램(hist) 그리기
[R] 데이터프레임 행,열 이름 가져오기

데이터목장님의
글이 좋았다면 응원을 보내주세요!

Designed by JB FACTORY