[R 기초] 10. ggplot2 시각화 기초

2026. 6. 30. 19:00·BI&Programming-Tools/R

ggplot2는 tidyverse에 포함된 시각화 패키지입니다.

그래프의 문법(Grammar of Graphics)을 기반으로 설계되어, 그래프를 레이어를 쌓는 방식으로 구성합니다.

ggplot2의 구조를 이해하면 다양한 그래프를 일관된 방식으로 만들 수 있습니다.

library(ggplot2)
# 또는
library(tidyverse)

 


기본 문법

ggplot2 그래프는 세 가지 핵심 요소로 구성됩니다.

ggplot(data = df, aes(x = 열이름, y = 열이름)) +
    geom_*(옵션)
  • ggplot(): 그래프의 기반을 설정합니다. 사용할 데이터와 전역 심미적 매핑을 지정합니다.
  • aes(): 데이터의 열을 시각적 요소(x축, y축, 색상, 크기 등)에 매핑합니다.
  • geom_*(): 어떤 종류의 그래프를 그릴지 지정합니다. +로 레이어를 추가합니다.
# 구성 요소를 단계별로 보면
p <- ggplot(df, aes(x = coverage, y = gc))  # 기반 설정
p <- p + geom_point()                        # 점 레이어 추가
p <- p + labs(title = "Coverage vs GC")     # 제목 추가
p

 

+ 뒤에서 줄바꿈이 가능합니다.

코드 가독성을 위해 geom_*(), labs(), theme() 등을 줄바꿈하면서 작성합니다.


데이터셋 로드 및 확인

예시로 R에 내장된 mtcars 데이터셋을 사용합니다.

data(mtcars)
head(mtcars)
str(mtcars)

 

mtcars는 자동차 32종의 연비, 실린더 수, 마력 등의 정보가 담긴 데이터셋입니다.

열 이름을 미리 파악해두면 아래 예시 코드를 따라가기 쉽습니다.

# 주요 열
# mpg: 연비 (miles per gallon)
# cyl: 실린더 수
# hp : 마력 (horsepower)
# wt : 차량 무게
# am : 변속기 종류 (0: 자동, 1: 수동)

 


Scatter Plot: geom_point()

두 수치형 변수 간의 관계를 점으로 나타냅니다.

ggplot(mtcars, aes(x = wt, y = mpg)) +
    geom_point()

aes() 안에 색상, 크기, 모양도 매핑할 수 있습니다.

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl), size = hp)) +
    geom_point(alpha = 0.7)

  • color = factor(cyl): 실린더 수에 따라 색상을 다르게
  • size = hp: 마력에 따라 점 크기를 다르게
  • alpha: 투명도 (0~1, 1이 불투명)

aes() 안의 설정은 데이터에 따라 달라지고, aes() 밖의 설정은 모든 점에 동일하게 적용됩니다.

ggplot(mtcars, aes(x = wt, y = mpg)) +
    geom_point(color = "blue", size = 3)   # 모든 점에 동일 적용


Text Plot: geom_text(), geom_label()

점 대신 텍스트를 표시합니다.

각 데이터 포인트에 이름이나 값을 표시할 때 사용합니다.

# geom_text(): 텍스트만 표시
ggplot(mtcars, aes(x = wt, y = mpg, label = rownames(mtcars))) +
    geom_text()

# geom_label(): 텍스트에 배경 박스 추가
ggplot(mtcars, aes(x = wt, y = mpg, label = rownames(mtcars))) +
    geom_label()

점과 텍스트를 함께 표시하려면 레이어를 쌓습니다.

ggplot(mtcars, aes(x = wt, y = mpg)) +
    geom_point() +
    geom_text(aes(label = rownames(mtcars)),
              hjust = -0.1, vjust = 0.5, size = 3)

  • hjust, vjust: 텍스트 위치 조정 (0.5가 중앙, 음수면 오른쪽으로 이동)

Box Plot: geom_boxplot()

그룹별 분포를 요약해서 보여줍니다.

중앙값, 사분위수, 이상값을 함께 확인할 수 있습니다.

ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
    geom_boxplot()

x축에 연속형 변수를 그대로 넣으면 하나의 박스만 그려집니다.

그룹 변수는 factor()로 감싸서 범주형으로 변환해야 합니다.

ggplot(mtcars, aes(x = factor(cyl), y = mpg, fill = factor(cyl))) +
    geom_boxplot(alpha = 0.7) +
    labs(x = "Cylinders", y = "MPG", fill = "Cylinders")


Line Plot: geom_line()

시간이나 순서에 따른 변화를 선으로 나타냅니다.

# 예시 데이터
df <- data.frame(
    time  = 1:10,
    value = c(3, 5, 4, 7, 6, 8, 7, 9, 8, 10)
)

ggplot(df, aes(x = time, y = value)) +
    geom_line()

# 선과 점을 함께
ggplot(df, aes(x = time, y = value)) +
    geom_line() +
    geom_point()

그룹별 선을 그리려면 group과 color를 지정합니다.

df_group <- data.frame(
    time  = rep(1:5, 2),
    value = c(1, 3, 2, 4, 3, 2, 4, 3, 5, 4),
    group = rep(c("A", "B"), each = 5)
)

ggplot(df_group, aes(x = time, y = value, color = group, group = group)) +
    geom_line() +
    geom_point()

group 매핑이 없으면 선이 제대로 연결되지 않습니다.

그룹 구분 없이 선을 하나만 그릴 때도 group = 1을 명시하는 경우가 있습니다.


Bar Plot: geom_bar(), geom_col()

두 함수는 비슷하지만 입력 데이터가 다릅니다.

geom_bar(): 빈도 자동 계산

x 변수의 각 값이 몇 번 등장하는지 자동으로 계산해서 막대를 그립니다.

ggplot(mtcars, aes(x = factor(cyl))) +
    geom_bar()

geom_col(): 값을 직접 지정

이미 집계된 데이터에서 x와 y를 직접 지정합니다.

df_sum <- data.frame(
    group = c("A", "B", "C"),
    count = c(15, 23, 9)
)

ggplot(df_sum, aes(x = group, y = count)) +
    geom_col()

# fill로 색상 채우기, 누적 막대
ggplot(mtcars, aes(x = factor(cyl), fill = factor(am))) +
    geom_bar()

# 나란히 배치
ggplot(mtcars, aes(x = factor(cyl), fill = factor(am))) +
    geom_bar(position = "dodge")

  • position = "stack": 누적 (기본값)
  • position = "dodge": 나란히
  • position = "fill": 비율로 정규화

Histogram: geom_histogram()

하나의 연속형 변수의 분포를 구간으로 나눠 보여줍니다.

ggplot(mtcars, aes(x = mpg)) +
    geom_histogram()

# 구간 수 또는 구간 너비 지정
ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(bins = 10)

ggplot(mtcars, aes(x = mpg)) +
    geom_histogram(binwidth = 3, fill = "steelblue", color = "white")

  • bins: 구간 수
  • binwidth: 구간 너비
  • fill: 막대 채우기 색상
  • color: 막대 테두리 색상

그룹별로 겹쳐서 보려면 alpha로 투명도를 조정합니다.

ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) +
    geom_histogram(binwidth = 3, alpha = 0.6, position = "identity")


aes() 안 vs 밖

ggplot2에서 가장 헷갈리는 부분 중 하나입니다.

# aes() 안: 데이터에 따라 달라짐
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl)))

# aes() 밖: 모든 점에 동일하게 적용
ggplot(mtcars, aes(x = wt, y = mpg)) +
    geom_point(color = "blue")

 

color = factor(cyl)은 데이터에 따라 색이 달라지므로 aes() 안에 넣고, color = "blue"처럼 고정된 값은 aes() 밖에 넣습니다.

색상 이름을 aes() 안에 넣으면 범례가 생기면서 의도치 않은 결과가 나옵니다.

'BI&Programming-Tools > R' 카테고리의 다른 글

R 기초 - 11. ggplot2 시각화 심화  (0) 2026.06.30
[R 기초] 9. Tidyverse  (0) 2026.06.29
[R 기초] 8. 데이터 전처리  (0) 2026.06.29
[R 기초] 7. 제어문과 함수  (0) 2026.06.29
[R 기초] 6. 데이터 구조 (행렬, 데이터프레임)  (0) 2026.06.28
'BI&Programming-Tools/R' 카테고리의 다른 글
  • R 기초 - 11. ggplot2 시각화 심화
  • [R 기초] 9. Tidyverse
  • [R 기초] 8. 데이터 전처리
  • [R 기초] 7. 제어문과 함수
데이터로 읽는 생명
데이터로 읽는 생명
is-note 님의 블로그 입니다.
  • 데이터로 읽는 생명
    In Silico Note
    데이터로 읽는 생명
  • 전체
    오늘
    어제
    • 분류 전체보기 (190) N
      • Bio-Knowledge (16)
        • 분자생물학 & 유전학 기초 (0)
        • 전사체학 & 유전자 발현 (0)
        • 구조생물학 & 단백질 (0)
        • 싱글셀 & 다중오믹스 (0)
        • 임상유전학 & 질환 데이터 (0)
      • Programming (4)
        • API (4)
      • BI&Programming-Tools (111)
        • File Formats (14)
        • Linux & Bash Script (38)
        • Python (35)
        • R (11)
        • 통계 (8)
        • Pipeline Manager (0)
        • Etc (5)
      • Bio Data Analysis (28) N
        • 서열분석개론 (6)
        • WGS(Whole Genome Seq) (11)
        • WES(Whole Exome Seq) (2)
        • RNA-Seq (4) N
        • Metagenome (2)
        • Non-human Resequencing (1)
        • 임상유전체 분석 (1)
        • Multi-Omics (1)
      • Bio-Trends & Tech (1)
      • 코딩테스트 연습 (30)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bioinformatics
    생물정보학
    R기초
    유전체분석
    fasta
    리눅스기초
    파이썬기초
    wgs
    통계
    FASTQ
    코딩테스트
    GATK
    데이터분석
    파이썬
    리눅스
    ngs
    파이썬연습
    파일포맷
    분자생물학
    R
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
데이터로 읽는 생명
[R 기초] 10. ggplot2 시각화 기초
상단으로

티스토리툴바