※ 해당 내용은 위의 책을 통해 R을 학습하면서 개인적으로 정리한 내용임을 밝힙니다.

 

[ 사용 Packages = tidyverse ] 

library(tidyverse)

[ 실습용 Data Set = diamonds ]

# diamonds : 54,000개 다이아몬드 각각으 가격, 캐럿, 색상, 투명도 등 정보를 가진 Data Set
diamonds

[ 참고 사항 ]

ggplot2는 보통 ggplot(data=<데이터>)에 지옴 함수를 + 하여 작동

  → 즉 그래프 형식을 변경하거나 표현을 추가하고 싶다면 +되는 지옴함수를 바꾸면 됨 

막대 그래프 그리기 ( geom_bar() )

 

막대그래프는 범주형 자료들을 한 눈에 비교하여 볼 때 유용하다. ggplot2에서는 아래와 같이 geom_bar() 함수를 활용하여 쉽게 구현 가능하다.

# geom_bar 활용 막대 그래프 작성 ( cut에 포함되는 범주들을 Count하여 구분 )
ggplot(data=diamonds)+geom_bar(mapping = aes(x = cut))

 

특이한 점이 보인다. Count라는 변수는 선언하지도 않았는데, 저절로 범주별 Count를 진행하였다. 여기서 알아야할 개념이 '스탯 = 통계적의 줄인말 = stat ' 이다. ggplot2에서 스탯이란 ' 그래프에 사용될 새로운 값을 지정해 나가는 과정'을 의미한다. 위처럼 cut 변수만 지정하였는데, Count 변수가 저절로 생긴 이유는 geom_bar()에는 기본으로 count 스탯이 있기 때문이다. 아래처럼 지옴과 스탯을 바꾸어 작성해도 결과는 같다.

ggplot(data=diamonds)+stat_count(mapping = aes(x = cut))

 

그렇다면 기본 스탯을 다른 스탯으로 덮어 씌울 수 는 없을까? 가능하다. stat 변수에 identity를 입력하면 된다.

 

# 연습용 Data
demo = tribble(
  ~cut, ~freq,
  "Fair", 1610,
  "Good", 4906,
  "Very Good", 12082,
  "Premium", 13791,
  "Ideal", 21551
)

ggplot(data=demo) + geom_bar(
  mapping = aes(x=cut, y=freq), stat = "identity"

 

빈도 수 (Count)가 아닌 비율로 막대 그래프를 그리고 싶다면, 매핑 aes 함수 y에 ..prop.. 변수를 입력해주면 된다.

 

ggplot(data=diamonds) + geom_bar( mapping = aes(x=cut,y=..prop.., group=1))

요약 값 ( Min, Max, 중간값 ) 등에 집중시키고 싶다면, stat_summary를 사용해도 좋다.

 

ggplot(data=diamonds) + stat_summary(
  mapping = aes(x=cut, y=depth),
  fun.min = min,
  fun.max = max,
  fun = median
  )

geom_bar()와 비슷한 함수 중 geom_col() 도 있다. Bar와 col의 차이는 통계적으로 변환을 하냐, 안하냐 차이다. 따라서 Col 같은 경우 매핑 시 2개의 변수를 지정해주어야 하는데, Bar의 경우 한 개의 변수만 지정해 주어도 기본 통계적 변수로 알아서 변환해 준다.

 

# geom_bar은 스탯 활용, X축만 입력해도 통계적 변환 후 그래프에 표시
#  geom_col은 Data를 통계적 변환하지 않고 그대로 표시

ggplot(data=diamonds)+geom_bar(mapping = aes(x = cut))
ggplot(data=diamonds)+geom_col(mapping = aes(x = cut, y=depth))

산점도, 기하 그래프를 학습할 때, 항상 학습한 것이 있다. 그래프에 한가지 변수를 더 추가하여 구분하는 것이다. geom_bar()에서는 Fill 변수에 구분하고자 하는 변수를 입력하면 된다. ( 색상은 랜덤 )

 

# Cut 변수를 Cut 변수로 구분, 즉, 각 범주마다 색상 입히ggplot(data=diamonds) + geom_bar(mapping = aes(x=cut, fill=cut))  

# 막대그래프 상 Clatity 변수로 색상 구분
ggplot(data=diamonds) + geom_bar(mapping = aes(x=cut, fill=clarity))

위의 막대 그래프는 한 변수 위에 다른 변수가 축적된 누적 막대그래프이다. 누적 막대그래프가 아니게 표현하고 싶다면, Position을 "identity", "dodge", "fill" 등으로 지정해주면 된다.

 

먼저 "identity"를 살펴보자. "identity"는 누적 막대그래프가 아닌 변수마다 0부터 시작하게 포지션을 잡고, 같은 범주끼리 묶어버린다. 아래 그래프를 보면 직관적으로 이해가 가능하다. ( 잘 보기 위해선 투명도도 추가 하자 )

 

# 누적 막대그래프가 아닌, 중복 막대그래프 그리기
# 외쪽 Count 범위를 보면 지정 안했을 때와의 차이를 알 수 있다.
ggplot(
  data=diamonds,
  mapping = aes(x=cut, fill = clarity)
) +
  geom_bar(alpha = 1/5, position = "identity")

동일한 기준에서 범주마다 한 변수의 비율을 비교하고 싶다면, Position을 "fill"로 지정하면 된다.

 

ggplot(
  data=diamonds,
  mapping = aes(x=cut, fill = clarity)
) +
  geom_bar( position = "fill")

 

각 범주마다 직관적으로 비교해보고 싶다면, "dodge"를 입력하면 된다.

 

+ Recent posts