[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

    ....