본문 바로가기
R 프로그래밍/R 데이터 시각화

[R 그래픽스] Scatterplots 그리기

by 찐남 2022. 1. 22.
R Graphics Cookbook을 기반으로 하여 작성하였습니다.

 

Scatterplot을 그리고 싶어요.
어떻게 하면 될까요?

 

 

일단, 가상의 데이터를 생성하고 만들어 볼게요.

set.seed(955) # Seed값 세팅

# 가상의 데이터 생성
dat <- data.frame(cond = rep(c("A", "B"), each=10),
                        xvar = 1:20 + rnorm(20,sd=3),
                        yvar = 1:20 + rnorm(20,sd=3))
head(dat)

library(ggplot2) # ggplot2 패키지 로딩

 

회귀선이 있는 기본 산점도

ggplot(dat, aes(x=xvar, y=yvar)) +
    geom_point(shape=1)      # 속이 빈 원 사용

ggplot(dat, aes(x=xvar, y=yvar)) +
    geom_point(shape=1) +       # 속이 빈 원 사용
    geom_smooth(method=lm)   # 선형 회귀선 추가 (기본적으로 95% 신뢰 영역 포함)

ggplot(dat, aes(x=xvar, y=yvar)) +
    geom_point(shape=1) +       # 속이 빈 원 사용
    geom_smooth(method=lm,   # 선형 회귀선 추가 (기본적으로 95% 신뢰 영역 포함)
                se=FALSE)             # 음영 처리된 신뢰 영역을 추가 X

ggplot(dat, aes(x=xvar, y=yvar)) +
    geom_point(shape=1) +    # 속이 빈 원 사용
    geom_smooth()               # 신뢰구간 영역과 함께 loess smoothed fit curve 추가

 

 

다른 변수로 색상/모양 설정

# cond 변수에 따른 색상 설정
ggplot(dat, aes(x=xvar, y=yvar, color=cond)) + geom_point(shape=1)

# 동일하지만 색상이 다르고 회귀선 추가
ggplot(dat, aes(x=xvar, y=yvar, color=cond)) +
    geom_point(shape=1) +
    scale_colour_hue(l=50) +      # 평소보다 약간 어두운 팔레트 사용
    geom_smooth(method=lm,   # 선형 회귀선 추가
                se=FALSE)             # 음영 처리된 신뢰 영역을 추가 X

# 데이터 영역을 넘어 회귀선 확장
ggplot(dat, aes(x=xvar, y=yvar, color=cond)) + 
    geom_point(shape=1) +
    scale_colour_hue(l=50) +      # 평소보다 약간 어두운 팔레트 사용
    geom_smooth(method=lm,   # 선형 회귀선 추가
                se=FALSE,             # 음영 처리된 신뢰 영역을 추가 X
                fullrange=TRUE)     # 회귀선 확장

# cond에 의한 모양 설정
ggplot(dat, aes(x=xvar, y=yvar, shape=cond)) + geom_point()

# 같지만 다른 모양으로
ggplot(dat, aes(x=xvar, y=yvar, shape=cond)) + 
    geom_point() +
    scale_shape_manual(values=c(1,2))  # 속이 빈 원과 삼각형 사용

 

오버 플로팅 처리

데이터 포인트가 많거나 데이터 스케일이 불연속적인 경우 데이터 포인트가 겹칠 수 있으며,

동일한 위치에 많은 포인트가 있는지 확인하는 것이 불가능합니다.

# xvar 및 yvar를 가장 가까운 5로 반올림
dat$xrnd <- round(dat$xvar/5)*5
dat$yrnd <- round(dat$yvar/5)*5

# 1/4 불투명도로 각 점을 부분적으로 투명하게 생성
# 과도한 오버 플로팅의 경우 더 작은 값을 사용
ggplot(dat, aes(x=xrnd, y=yrnd)) +
    geom_point(shape=19,      # 실선 사용
               alpha=1/4)           # 1/4 불투명도

# Jitter the points
# 지터 범위는 x축에서 1, y축에서 .5
ggplot(dat, aes(x=xrnd, y=yrnd)) +
    geom_point(shape=1,      # 속이 빈 원 사용
               position=position_jitter(width=1,height=.5))

 

 

반응형

댓글