정보

    • 업무명     : R을 이용한 통계 분석 및 데이터 시각화 : ggplot2 (geom_bar)

    • 작성자     : 박진만

    • 작성일     : 2020-04-06

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분석 환경입니다. 

    • 통계 분석 기능으로 통계 검정, 선형 회귀 분석, 시계열 데이터 분석, 클러스터링 등을 지원하고 있습니다.

    • 또한 최신 논문에서 발표된 같은 새로운 기술도 R로 구현되는 경우가 많습니다.

    • 특히 시각화 기능으로 히스토그램, 막대 그래프, 선 그래프, 산포도, 나무 모양 그림이나 히트맵 등 기본적인 그래프가 기본으로 지원하고 있습니다.

    • 또한 ggplot2 등의 패키지를 사용하여 더 높은 수준의 그림을 가시화할 수 있습니다.

     

     

    [특징]

    • 데이터를 이해하기 위해서 통계 분석 및 데이터 시각화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

       

    [기능]

    • 데이터형 소개

     

    [활용 자료]

    • 없음

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 소스 코드 예시 참조

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v3.6.2

    • R Studio v1.2.5033

     

     소스 코드

    [geom_bar]

    • ggplot2 패키지로부터 geom_bar의 막대 그래프를 그릴 수 있다.

    • 막대 그래프의 나열 등은 geom_bar 내부의 인수로 지정한다. 

    • 또한 theme 인수를 이용해서 그래프의 테마와 옵션 등을 지정할 수 있다.

     

    [막대그래프]

    • 아래 코드는 ggplot2에서 간단한 막대 그래프를 그리는 방법을 보여준다. 

    • 막대의 색상을 학술 저널의 그림처럼 결과를 얻으려면 ggsci 색상 팔레트를 호출하여 사용하면 된다.

    library(ggplot2)
    library(ggsci)
    
    x <- data.frame(
        sample = c("A1", "A2", "B1", "B2", "C1", "C2"),
        weight = c(0.32, 0.33, 0.21, 0.22, 0.37, 0.36)
    )
    
    g <- ggplot(x, aes(x = sample, y = weight, fill = sample))
    g <- g + geom_bar(stat = "identity")
    g <- g + scale_fill_nejm()
    plot(g)

     

    • 이 때 가로축 좌표 레이블이 긴 경우 레이블이 서로 겹치는 경우가 있다.

    • 그런 경우, 다음과 같이 theme함수에서 레이블의 회전을 조정하여 비스듬하게 할 수 있다.

    g <- g + theme(axis.text = element_text(angle = 30))
    plot(g)

     

    [가로 막대 그래프]

    • 막대를 가로로 하여그래프를 그리려면 먼저 geom_bar 함수에서 막대 그래프를 그리고 이어서 coord_flip함수에서 x와 y 축을 바꿔 넣으면 된다.

    library(ggplot2)
    library(ggsci)
    
    x <- data.frame(
        sample = c("A1", "A2", "B1", "B2", "C1", "C2"),
        weight = c(0.32, 0.33, 0.21, 0.22, 0.37, 0.36)
    )
    
    g <- ggplot(x, aes(x = sample, y = weight, fill = sample))
    g <- g + geom_bar(stat = "identity")
    g <- g + coord_flip()
    g <- g + scale_fill_nejm()
    plot(g)

     

    [누적 막대 그래프]

    • 누적 그래프를 그리는 경우 어떤 항목을 그룹화할지 여부를 지정할 필요가 있다. 

    • 예를 들어, 아래의 경우에는 cell 열을 그룹화하는 예시이다.

    library(ggplot2)
    library(ggsci)
    
    x <- data.frame(
        cell   = c("A", "A", "B", "B", "C", "C"),
        sample = c("A1", "A2", "B1", "B2", "C1", "C2"),
        weight = c(0.32, 0.33, 0.21, 0.22, 0.37, 0.36)
    )
    
    g <- ggplot(x, aes(x = cell, y = weight, fill = sample))
    g <- g + geom_bar(stat = "identity")
    g <- g + scale_fill_nejm()
    plot(g)

     

    [누적 막대 그래프 (비율)]

    • 누적 막대 그래프의 세로축을 100 %가 되도록 해 각 항목을 비율로 그리기 위해서는 geom_bar 함수의 인수를 position = "fill"지정한다. 

    • 그리고 가로축의 라벨을 퍼센트 표기하기 위해 scales 패키지의 perecnt변수를 이용할 수 있다.

    library(ggplot2)
    library(ggsci)
    library(scales)
    
    x <- data.frame(
        cell   = c("A", "A", "B", "B", "C", "C"),
        sample = c("A1", "A2", "B1", "B2", "C1", "C2"),
        weight = c(0.38, 0.23, 0.11, 0.12, 0.17, 0.56)
    )
    
    g <- ggplot(x, aes(x = cell, y = weight, fill = sample))
    g <- g + geom_bar(stat = "identity", position = "fill")
    g <- g + scale_y_continuous(labels = percent)
    g <- g + scale_fill_nejm()
    plot(g)

     

    [막대 그래프 나란히 그리기]

    • 막대 그래프를 모두 일률적으로 그리는 경우에는 아래와 같이 geom_bar 함수의 position 인수를 지정한다.

    library(ggplot2)
    library(ggsci)
    
    x <- data.frame(
        cell   = c("A", "A", "B", "B", "C", "C"),
        sample = c("A1", "A2", "B1", "B2", "C1", "C2"),
        weight = c(0.32, 0.33, 0.21, 0.22, 0.37, 0.36)
    )
    
    g <- ggplot(x, aes(x = cell, y = weight, fill = sample))
    g <- g + geom_bar(stat = "identity", position = "dodge")
    g <- g + scale_fill_nejm()
    plot(g)

     

    [막대 그래프에서 오차 범위 표시하기]

    • 막대 그래프를 geom_bar로 그린 후 geom_error 함수를 이용하여 오차 범위를 표시할 수 있다.

    • 그러나 이를 표시하기 위해서는 평균값과 오차 막대 높이인 표준 편차를 미리 계산해 둘 필요가 있다.

    library(reshape2)
    library(ggplot2)
    library(ggsci)
     
    data <- data.frame(
      A = rnorm(20, 10, 4), 
      B = rnorm(20, 20, 2), 
      C = rnorm(20, 15, 3)
    )
    
    f <- data.frame(
      group = colnames(data),
      mean  = apply(data, 2, mean),
      sd    = apply(data, 2, sd)
    )
    
    head(f)
    ##   group     mean       sd
    ## A     A 11.89627 3.418593
    ## B     B 20.40094 1.739639
    ## C     C 15.11086 2.408412
     
    g <- ggplot(f, aes(x = group, y = mean, fill = group))
    g <- g + geom_bar(stat = "identity")
    g <- g + geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd, width = 0.3))
    g <- g + scale_fill_nejm() 
    plot(g) 

     

    [다음글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : ggplot2 (geom_line)

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : ggplot2 (geom_line) 작성자 : 박진만 작성일 : 2020-04-06 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어..

    shlee1990.tistory.com

     

    [이전글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : 그래프 저장

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 그래프 저장 작성자 : 박진만 작성일 : 2020-04-05 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통..

    shlee1990.tistory.com

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기