Small Steps Every Day

매일 천천히 조금씩 앞으로 나아가다.

개인 공부 기록/R 시각화

R 시각화 _ ggplot2 (1) _ geom_point(), geom_smooth() 활용

mindata1 2025. 4. 1. 18:27
 학습목표
1. ggplot2 패키지에서 데이터를 화면에 대응시키는 매핑을 구성하는 다섯가지 요소를 설명할 수 있다.
2. ggplot2 패키지를 이용한 2. ggplot() + geom 함수 형태의 기본적인 명령문을 이해할 수 있다.
3. 산점도를 그리는 그리는 실습을 통해 ggplot2에서 층(layer)과 스케일(scale)의 역할을 이해할 수 있다. 
 
 주요용어
  • ggplot2 : 윌킨슨이 주창한 그래픽 문법을 기반으로 사용자가 여러 가지 그래픽 요소를 쉽게 선택하여 그래프를 그릴 수 있게 해 주는 패키지
  • 층(layer) : ggplot2에서 화면에 아이템을 표시하기 위해 사용되는 우너형과 채널에 대한 정보를 담고 있는 geom 함수
  • 스케일(scale) : 그래프의 가로축과 세로축, 색, 모양, 크기 채널에 대한 디테일이나 범례에 대한 디테일을 수정할 때 쓰이는 ggplot2 함수

 

# 디렉토리 설정
setwd("/Users/sm/Desktop/KNOU/visual/R-codes")

# ggplot2 설치 및 활성화
install.packages("ggplot2")
library(ggplot2)

 

# 데이터 불러오기
load("sah.RData")

# 산점도 그래프 그리는 방법 3가지
ggplot(sah) + geom_point(aes(x=age, y=sbp))
ggplot(sah, aes((x=age, y=sbp)) + geom_point()
ggplot(sah, aes(age, sbp)) + geom_point()

 

# 컬러 설정
ggplot(sah, aes(age, sbp, color=chd)) + geom_point()

# 모형 설정
ggplot(sah, aes(age, sbp, shape=chd)) + geom_point()

 

 

# 평활선 추가
ggplot(sah, aes(age, sbp)) + geom_smooth()

 

 

# 평활선 컬러로 구분
ggplot(sah, aes(age, sbp, color=chd)) + geom_smooth()

 

 

# 산점도 + 평활선 동시 시각화
ggplot(sah, aes(age, sbp)) + geom_point() + geom_smooth()

 

# a 에 그래프 저장 후 평활선 추가
a<-ggplot(sah, aes(age, sbp)) + geom_point()
a
a + geom_smooth()

 

 

# 스케일 0~100 으로 조정
ggplot(sah, aes(age, sbp)) + geom_point() + 
  scale_x_continuous(limits=c(0, 100))

 

# 코드 중도 엔터 시, + 가 끝으로 오지 않으면 에러 발생
ggplot(sah, aes(age, sbp)) + geom_point()
+ scale_x_continuous(limits=c(0, 100))
### Error occurs

 

# 스케일 조정 3가지 방법
a<-ggplot(sah, aes(age, sbp)) + geom_point()
a
a + scale_x_continuous(limits=c(0, 100)) + scale_y_continuous(limits=c(90, 250))
a + lims(x=c(0, 100)) + lims(y=c(90, 250))
a + xlim(c(0, 100)) + ylim(c(90, 250))

 

 

a + geom_smooth()

 

# xlim 만 사용하면, 20과 40 데이터 외 결측치 처리 되어 결과가 정확하지 않음
a + geom_smooth() + xlim(c(20, 40))

# 따라서 coord_cartesian 로 감싸줘야 원하는 스케일의 정확한 결과 얻음
a + geom_smooth() + coord_cartesian(xlim=c(20, 40))

 

 

# 좌우 여백 설정
a + scale_x_continuous(limits=c(0, 100), expand = expansion(0))
a + scale_x_continuous(limits=c(0, 100), expand = expansion(add=10))
a + scale_x_continuous(limits=c(0, 100), expand = expansion(mult=0.3))

 

 

# x축 표기 설정
a + scale_x_continuous(breaks=c(20, 40, 60))
a + scale_x_continuous(breaks=c(20, 40, 60), labels = c("20.0", "40.0", "60.0"))

 

# y축 표기 설정
ggplot(sah, aes(x=age, y=ldl))+geom_point()
ggplot(sah, aes(x=age, y=log(ldl)))+geom_point()
ggplot(sah, aes(x=age, y=ldl))+geom_point()+scale_y_continuous(trans="log")