트위티의 열하일기

4. 그래프 만들기 (ggplot2) 본문

Programming Languages/R

4. 그래프 만들기 (ggplot2)

예지레슬리초이 2025. 2. 17. 16:45

# ggplot2 패키지

그래프를 만들 때 가장 많이 사용하는 패키지. 이를 통해 산점도, 막대 그래프, 선 그래프, 상자 그림을 만들 수 있음

 

[layer 구조]

배경을 만듦 → 그 위에 그래프 형태를 그림 → 축 범위, 색, 표식 등 설정 추가

layer 구조

* qplot() vs ggplot()

- gplot()은 기능은 많지 않지만 문법이 간단 → 전처리 단계에서 데이터를 빠르게 확인해 보는 용도로 활용

- 최종적으로 분석 결과를 보고하기 위해 그래프를 만들 때 → ggplot() 사용

# 산점도(Scatter Plot)

데이터를 x축과 y축에 점으로 표현한 그래프. 연속 값으로 된 두 변수의 관계를 표현할 때 사용됨. 

 

1. 배경 설정하기 (그래프를 그릴 배경 생성)

- data에 사용할 데이터 지정

- aes에 x축, y축에 사용할 변수 지정

# x 축은 displ, y 축은 hwy 로 지정해 배경 생성
ggplot(data = mpg, aes(x = displ, y = hwy))

 

2. 그래프 추가하기 (그린 배경 위에 그래프 추가하기)

- '+' 기호를 활용해 그래프 유형을 지정하는 함수 추가

# 배경에 산점도 추가
ggplot(data = mpg, aes(x = displ, y = hwy)) + geom_point()

 

3. 축 범위를 조정하는 설정 추가하기

- '+' 기호를 활용해 그래프 설정을 변경하는 코드 추가

- 데이터 전체가 아니라 일부만 표현하고 싶을 때 축 범위를 설정

- 축 범위는 xlim(), ylim()을 이용해 지정

# x축 범위 3~6으로 지정
ggplot(data = mpg, aes(x = displ, y = hwy)) + geom_point() + xlim(3, 6)
# x축 범위 3~6, y축 범위 10~30으로 지정
ggplot(data = mpg, aes(x = displ, y = hwy)) +
  geom_point() +
  xlim(3, 6) +
  ylim(10, 30)

코드 실행 결과

# 막대 그래프 (Bar chart)

데이터의 크기를 막대의 길이로 표현한 그래프. 집단 간 차이를 표현할 때 주로 사용

 

1. 집단별 평균표로 구성된 데이터 프레임 만들기

- dplyr 패키지를 이용해 데이터 프레임 만듦

library(dplyr)

df_mpg <- mpg %>%
  group_by(drv) %>%
  summarise(mean_hwy = mean(hwy))
  
df_mpg

# 결과
# A tibble: 3 × 2
  drv   mean_hwy
  <chr>    <dbl>
1 4         19.2
2 f         28.2
3 r         21

* '구동 방식별 평균 고속도로 연비'로 구성된 데이터 프레임 만듦

2. 만든 데이터 프레임으로 그래프 생성하기 

- aes의 x축: 범주를 나타내는 변수, y축: 평균값을 나타내는 변수 지정

- '+' 기호로 막대 그래프를 만드는 함수 geom_col()을 추가

ggplot(data = df_mpg, aes(x = drv, y = mean_hwy)) + geom_col()

막대 그래프 생성

3. 크기 순으로 정렬하기

- 막대는 기본적으로 범주형 변수의 알파벳 순서로 정렬됨

- 변수의 값이 순자+문자의 형태로 구성되면 숫자 오름차순, 알파벳 오름차순으로 정렬됨

- reorder() : 막대를 값의 크기 순으로 정렬

# reorder()에 x축 변수와 정렬 기준으로 삼을 변수 지정
# 정렬 기준 변수 앞에 '-' 부호 붙이면 내림차순으로 정렬

ggplot(data = df_mpg, aes(x = reorder(drv, -mean_hwy), y = mean_hwy)) + geom_col()

 

4. 빈도 막대 그래프

값의 개수(빈도)로 막대의 길이를 표현한 그래프. 

- x축만 지정 (y축 지정할 필요 없음)

- geom_bar() 사용: 빈도 막대 그래프 표현

- [유의!] 별도로 표를 만들지 않고 원자료를 이용해 바로 만듦 (↔ unlike 평균 막대 그래프)

ggplot(data = mpg, aes(x=drv)) + geom_bar()

 

# 선 그래프 (Line Chart)

데이터를 선으로 표현한 그래프. 시간에 따라 달라지는 데이터를 표현할 때 이용 (e.g. 환율, 주가지수)

- 시계열 데이터 (Time Series Data): 일정 시간 간격을 두고 나열된 데이터

- 시계열 그래프 (Time Series Chart): 시계열 데이터를 선으로 표현한 그래프

 

1. 시계열 그래프 만들기

- geom_line() 사용: 선 그래프로 표현

ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line()

 

# 상자 그림 (Box Plot)

데이터의 분포(퍼져 있는 형태)를 직사각형 상자 모양으로 표현한 그래프.

평균만 볼 때보다 데이터의 특징을 더 자세히 이해할 수 있음

- geom_boxplot() 사용: 상자 그림으로 표현

상자 그림과 해당 그림이 의미하는 내용

*참고

- ggplot2로 만든 다양한 그래프와 코드 살펴보기

https://r-graph-gallery.com/ggplot2-package.html

 

Data visualization with R and ggplot2 | the R Graph Gallery

ggplot2 is the most famous package for data visualization with R. This page offers tip and tricks concerning its usage.

r-graph-gallery.com

- ggplot2의 확장 패키지들 (만들 수 있는 새로운 형태의 그래프 탐색)

https://exts.ggplot2.tidyverse.org/

 

ggplot2 extensions

Submit your ggplot2 extensions so that other R users can easily find them. To do so, simply submit a pull request using these simple instructions.

exts.ggplot2.tidyverse.org