반응형
이 포스팅은 다음 유튜브 산점도 그리기로 배우는 ggplot2 완전 정복 튜토리얼 내용을 요약한 포스팅입니다.
ggplot2 패키지를 이용한 산점도 그리기
오늘은 ggplot2
패키지를 사용해 산점도를 그리는 방법에 대하여 정리해본다. 숙제를 하거나, 논문을 쓸 때, 가장 많이 그리는 그래프이기도 하며, 매번 ggplot 쓰면서 까먹고 찾아보던 것을 정리해보았다.
데이터 불러오기 및 highlow 칼럼 생성
우리가 예제로 사용할 데이터를 불러오자. 다음의 데이터를 다운 받아 R코드가 있는 폴더에 넣어놓자.
mydata <- read.csv("examscore2.csv", header = TRUE)
# highlow 칼럼 생성
mydata$highlow <-
ifelse(mydata$midterm + mydata$final < 150, "low", "high")
# 데이터 확인
dim(mydata)
## [1] 30 5
head(mydata)
## student_id gender midterm final highlow
## 1 1 M 62 63 low
## 2 2 F 60 53 low
## 3 3 M 60 62 low
## 4 4 M 30 26 low
## 5 5 F 80 91 high
## 6 6 F 33 29 low
데이터 로드
ggplot2 패키지를 로드하고, 데이터를 플랏에 로드한다. 테마는 가장 깔끔한 bw로 설정함.
library(ggplot2)
# 데이터 로드
p <- ggplot(data = mydata) +
# 그래프 테마 선택
theme_bw()
p
산점도 정보 입력
산점도 레이어를 입력한다. x축과 y축에 사용될 정보를 입력한다.
p <- p +
# 산점도 정보 입력
geom_point(aes(x = midterm, y = final))
p
제목 입력
그래프에 사용되는 제목들을 입력할 때에는 다음과 같이 labs
함수를 이용한다.
p <- p + labs(title = "학생들 성적 분포도",
subtitle = "중간 vs. 기말 성적",
x = "중간고사", y = "기말고사",
caption = "https://statisticsplaybook.tistory.com/18")
p
속성 (aesthetic) 입력
ggplot을 처음 접할 때 가장 이해하기 힘든 것이 aesthetic 인 것 같다. 그래프의 속성을 데이터와 이어주는 요소들을 aesthetic이라고 정의하고, aes()
함수를 사용하여 접근한다고 생각하자.
p <- p +
aes(
# 성별 색깔 다르게
color = gender,
# 사이즈 처음 15개 1, 나머지 5
size = rep(c(2.5, 5), each = 15),
# 성별 모양 다르게
shape = gender,
# 전체 투명도 0.8
alpha = 0.8)
p
색상 설정 (수동)
# 수동 색상 설정
p + scale_color_manual(
values = c("red", "blue"),
labels = c("여자","남자")
)
색상 설정 (팔레트 이용)
# 팔레트 통한 색상 설정
# BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral
# Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3
p <- p +
scale_color_brewer(palette = "Set1",
labels = c("여자", "남자")) +
scale_shape_discrete(labels = c("상위권", "하위권"))
p
속성 확정하기
# 속성 finalization
p <- p +
scale_alpha_identity() +
scale_size_identity()
p
범례 설정
# 범례(legend) 설정
mygender <- guide_legend(title = "성별",
ncol = 2, reverse = TRUE, order = 1)
myhighlow <- guide_legend(title = "성적별",
ncol = 2, order = 2)
p <- p +
# color, shape 속성에 똑같이 적용
guides(color = mygender,
shape = myhighlow) +
# 범례 위치 변경
theme(legend.position = "bottom",
)
p
축 단위 변경하기
# 축 설정
p <- p +
scale_x_continuous(
limits = c(10, 105),
breaks = 1:5 * 20,
labels = paste0(1:5 * 20, "점")) +
scale_y_continuous(
limits = c(10, 105),
breaks = 1:5 * 20,
labels = paste0(1:5 * 20, "점"))
p
그래프에 글자 넣기
# 글자 쓰기
p <- p + annotate("text",
x = 80, y = 10,
label = "© 2020 Issac Lee",
alpha = 0.5)
p
데이터 설명 추가하기
library(ggrepel)
mypoints <- mydata[mydata$midterm>80,]
p <- p +
geom_label_repel(
data = mypoints,
aes(x = midterm,
y = final,
label = paste("(",midterm, ", ",final,")")),
color = "black",
size = 2)
p
비율 조정
# 비율 조정
p <- p + coord_fixed()
p
반응형
'R > R시각화' 카테고리의 다른 글
r4issactoast을 이용한 XY-plot 쉽게 그리기 (0) | 2023.06.10 |
---|---|
R을 사용한 논문용 그래프 - 4강. 여러 그래프를 한번에 그리기 mfrow() (0) | 2023.06.10 |
R을 사용한 논문용 그래프 - 3강. 범례 넣기와 그래프 겹쳐 그리기 (0) | 2023.06.10 |
R을 사용한 논문용 그래프 - 2강. 배경색 지정 및 수학 기호로 제목 달기 (0) | 2023.06.10 |
R을 사용한 논문용 그래프 그리기 - 1강. 축 및 배경 기준선 그리기 (0) | 2023.06.10 |
댓글