개인 공부 기록/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")