안녕하세요. 이번에는 ggplot2 패키지를 이용해서 서로 다른 그래프를 겹치는 방법을 소개하겠습니다.
[목차]
1. ggplot2 의 그래프 그리는 방식
2. 히스토그램과 확률 밀도 함수 겹치기 ( histogram , probability density function)
3. 산점도와 회귀선 겹치기 (point, line)
4. 산점도와 박스 겹치기 (scatter, Boxplot )
[내용]
1. ggplot2 의 그래프 그리는 방식
ggplot2에서 그래프를 결합하는 방법은 + 연산자를 사용하여 간단하게 수행됩니다. ggplot2는 그래프를 레이어(layer) 단위로 작성하며, 각 레이어는 +로 결합됩니다. 이러한 방식은 누적해서 그래프를 구성할 수 있고, 각각의 함수는 특정 그래프 요소를 추가하거나 수정합니다. 결합된 ggplot 객체를 변수에 할당하면 나중에 그래프를 수정하거나 저장할 때 유용합니다. 이러한 방식으로 + 연산자를 사용하여 여러 레이어를 결합하여 복잡한 그래프를 만들 수 있습니다.
한편 이 "레이어 추가"는 그래프에 추가되는 구성 요소로, 기하 객체 (geom)와 통계적 변환 (stat)으로 구성됩니다.
기하 객체 (geom): 데이터를 시각화하는 요소로, 점, 선, 막대, 상자 등이 있습니다. geom_* 함수를 사용하여 추가합니다.
geom_point() # 산점도를 추가
통계적 변환 (stat): 데이터에 통계적 변환을 적용하는 요소로, 회귀선, 히스토그램 등이 있습니다. stat_* 함수를 사용하여 추가합니다.
stat_smooth() # 회귀선을 추가
여러 레이어를 함께 사용하여 그래프를 만들 수 있습니다.
2. 히스토그램과 확률 밀도 함수 겹치기
히스토그램은 데이터를 구간별로 나누어 각 구간에 속하는 데이터의 빈도를 막대로 나타낸 그래픽 표현이고 확률 밀도 함수는 확률 변수의 값이 특정 구간에 속할 확률을 나타내는 함수입니다. 각각은 모수 대비 발생 빈도를 나타내는데 유용한 그래프 입니다. 두 그래프를 겹쳐서 그려보겠습니다.
# 데이터 생성
set.seed(123)
data <- data.frame(value = rnorm(1000))
# 히스토그램과 밀도 추정 그래프를 겹치기
ggplot(data, aes(x = value)) +
geom_histogram(aes(y = ..density..), binwidth = 0.5, fill = "lightblue", color = "black", alpha = 0.7) +
geom_density(color = "red") +
ggtitle("Histogram and Density Plot") +
xlab("Value") +
ylab("Density")
3. 산점도와 회귀선 겹치기
mod <- loess(hwy ~ displ, data = mpg)
grid <- data.frame(displ = seq(min(mpg$displ), max(mpg$displ), length = 50))
grid$hwy <- predict(mod, newdata = grid)
std_resid <- resid(mod) / mod$s
outlier <- subset(mpg, abs(std_resid) > 2)
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
geom_line(data = grid, colour = "blue", size = 1.5) +
geom_text(data = outlier, aes(label = model))
mod <- loess(hwy ~ displ, data = mpg): "mpg" 데이터셋에서 "hwy" (고속도로 연비)와 "displ" (배기량) 변수 간의 관계를 모델링하기 위해 로컬 가중치 스무딩 회귀 모델을 적합시킵니다. 그 후 연산하는 부분은 생략하고 그리는 부분을 설명하겠습니다.
ggplot(mpg, aes(displ, hwy)) + ...: "mpg" 데이터셋을 기반으로 하는 ggplot을 생성합니다. "displ"을 x축으로, "hwy"를 y축으로 하는 산점도를 그리고, 이후에 나오는 라인 및 텍스트 레이어를 추가합니다.
geom_point() + : 산점도를 추가합니다.
geom_line(data = grid, colour = "blue", size = 1.5) + : "grid" 데이터프레임을 사용하여 회귀선을 그립니다. 선의 색상은 파란색이고, 굵기는 1.5로 지정합니다.
geom_text(data = outlier, aes(label = model)): "outlier" 데이터프레임의 이상치에 대한 텍스트를 추가합니다. "model" 변수를 라벨로 사용합니다.
4. 산점도와 박스 겹치기
library(ggplot2)
ggplot(aes(y = hwy,x = class,fill= class),data = mpg) +
geom_boxplot() +
geom_jitter(alpha = .2, colour = "black", fill = "white") +
theme_minimal() +
theme(legend.position="right") +
xlab("class") +
ylab("hwy") +
scale_fill_manual(values=c("111111","2CCDDD","#5C9AC5","#82BD4E","#EDD054","#EE6A64","#F40000"))
ggplot(aes(y = hwy, x = class, fill = class), data = mpg) : ggplot 함수를 사용하여 그래프를 생성합니다.
aes 함수를 사용하여 y축은 hwy, x축은 class로 설정하고, fill은 class로 지정합니다.
데이터는 mpg를 사용합니다.
geom_boxplot() + : geom_boxplot 함수를 사용하여 상자그림을 추가합니다.
geom_jitter(alpha = .2, colour = "black", fill = "white") + : geom_jitter 함수를 사용하여 산점도를 추가합니다. alpha는 점의 투명도, colour는 점의 테두리 색, fill은 점의 색을 설정합니다.
theme_minimal() + : theme_minimal 함수를 사용하여 그래프의 테마를 간결한 스타일로 설정합니다.
theme(legend.position = "right") + : theme 함수를 사용하여 그래프의 추가적인 테마를 설정합니다. 여기서는 범례(legend)를 오른쪽에 위치시킵니다.
xlab("class") +
ylab("hwy") +
scale_fill_manual(values = c("111111", "2CCDDD", "#5C9AC : scale_fill_manual 함수를 사용하여 class 변수에 따라 채우는 색을 수동으로 설정합니다.
'정리 > 시각화' 카테고리의 다른 글
[IDE] VSCode Python Jupyter Notebook 설정 (Markdown부터) (2) | 2023.11.20 |
---|---|
[R] Rshiny highcharts로 주식 그래프 그리기 (그래프 배열) (1) | 2023.11.09 |
[R] ggplot에 내가 원하는 point 그리기 (0) | 2019.10.20 |
[R] 복수의 plot align 하기 정렬 하기 (0) | 2018.11.11 |
[R] ggplot2 그래프 화면 분할 (0) | 2018.10.28 |