본문 바로가기
Data Science

대표적인 범주형 plot, geom_bar()

by Jacey312 2023. 12. 30.

geom_bar() 개요

geom_bar() 함수는 ggplot2 패키지에서 사용되는 함수로, 막대 그래프(Bar plot)를 생성하는 데에 사용됩니다. 이 함수는 주로 범주형 변수의 빈도수를 시각화할 때 활용됩니다.

TipsDay = data.frame(day = factor(c(“Thur”,”Fri”,”Sat”,”Sun”), 
levels = c(“Thur”,”Fri”,”Sat”,”Sun”)), 
count = c(62,19,87,76))
ggplot(TipsDay, aes(day,count))+geom_bar(stat=”identity”)

day-count geom_bar() 그래프

 

 

하나의 bar로 합쳐서 그리고 싶은 경우에는 X 축에 입력되는 변수가 아무것도 없도록 설정해야 합니다. 즉, X축에 입력되는 값이 아무것도 없도록 x=""로 설정해야 합니다. 이 경우에는 하나의 막대 그래프에 여러 day 값들이 하나의 열로 합쳐지기 때문에 day마다 특정 색상을 취하도록 설정하는 경우가 많습니다. 예를 들면, 아래의 코드와 같습니다.

ggplot(TipsDay, aes(x=””, y=count, fill=day))+geom_bar(stat=”identity”)

 

파이(Pie) 차트 그리기 - coord_polar

파이 차트(pie chart)는 원 그래프라고도 합니다. 원 그래프는 전체를 100%로 가정하고, 각 부분이 전체의 어느 정도를 차지하는지를 나타내는 데 사용됩니다. 주로 범주형 데이터의 상대적인 비율을 비교할 때 사용됩니다. 원 그래프는 다수의 카테고리가 있을 때, 어떤 부분이 두드러지게 다른 부분보다 크거나 작은지를 시각적으로 보여줄 때 유용하게 활용됩니다. 예를 들어, 전체 수입에서 TOP 3 소스를 보여주거나, 특정 소스가 타 소스 대비 몇 배 이상의 비중을  차지하는 등의 데이터를 보여줄 때 유용하게 사용할 수 있습니다.

 

그러나 원 그래프는 데이터의 비율을 정확하게 비교하기에는 한계가 있고, 많은 부분이나 복잡한 데이터를 표현하기에는 적합하지 않을 수 있습니다. 이런 경우에는 대안으로 막대 그래프나 기타 시각화 방법을 고려할 수 있습니다.

 

상기 사례에서 살펴본 코드에서 원 그래프를 적용하는 방법을 설명해보겠습니다. 이 경우 geom_bar() 함수를 적용하지만 x축에 입력되는 값이 없고, 동시에 coord_ploar() 함수에 y변수를 입력하도록 작성됩니다.

ggplot(TipsDay, aes(x=””, y=count, fill=day))+geom_bar(stat=”identity”)+coord_polar(“y”)

 

범주별 폭 구분 - dodge

원 그래프에 범주별 색상을 다르게 적용하는 경우를 보다 상세하게 살펴보도록 합시다. mpg 데이터셋을 사용하여 자동차 클래스(class 변수)에 따른 빈도를 나타내는 막대 그래프를 생성하며, 각 클래스별로 drv 변수의 비중이 어떻게 분포되어 있는지를 추가적으로 확인하기 위헤 drv 변수에 따른 색상을 표시하도록 합니다. 결과적으로, 각 클래스의 빈도를 시각적으로 비교하면서, drv 변수에 따른 차이도 확인할 수 있게 됩니다.

 

이때, 각 클래스별 그래프는 하나의 막대(bar)로 표현되고 각 막대에 drv 변수가 축적되어 나타나기 때문에 각 클래스별 drv 변수에 따른 빈도 차이를 비교하기 어렵습니다. 보다 정확한 비교를 위해서는 각 클래스별로 drv 변수의 개수에 맞는 개수의 막대가 그려져야 합니다. 

 

이러한 drv 변수별 빈도 차이를 비교하기 위해 적절한 인수가 바로 position입니다. geom_bar() 함수에 poisition="dodge"를 적용하게 되면 각 클래스 내 존재하는 drv 막대가 나란히 표시되도록 설정하며, 이에 따라 각 클래스와 drv 변수에 따른 빈도를 비교함으로써 두 변수 간의 관계를 시각적으로 쉽게 확인할 수 있습니다.

 

# position 적용 전
ggplot(mpg, aes(class))+ geom_bar(aes(fill=drv))
# position 적용 후
ggplot(mpg, aes(class))+ geom_bar(aes(fill=drv), position=”dodge”)

position = "dodge" 적용 전

 

position = "dodge" 적용 후

'Data Science' 카테고리의 다른 글

geom_histogram() 살펴보기  (0) 2023.12.30
geom_point() vs. geom_jitter()  (0) 2023.12.30
산점도와 함께 쓰는 geom_smooth()  (0) 2023.12.30
통계값 시각화 방법  (0) 2023.12.30
point 대신 text 표시, geom_text  (0) 2023.12.30