본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
ggplot2

그래프에 수직선(geom_vline), 수평선(geom_hline), 대각선(geom_abline) 그리기 in R

by 아참형인간 2022. 6. 14.
hvabline.knit

사용데이터 : https://2stndard.tistory.com/68

geom_vline(), geom_hline()

geom_vline()geom_hline()은 수직선과 수평선으로 표현되는 레이어를 생성한다. geom_segment()과 유사하지만 xinterceptyintercept의 하나의 매개변수만으로 수직선, 수평선을 생성할 수 있는 특징이 있으며, 주로 기준선을 설정할 때 사용한다.

geom_vline()geom_hline()에서 사용하는 미적 요소는 x, y, xend, yend, alpha, color, group, fill, linetype, size 등 이다.

geom_vline(mapping = NULL, data = NULL, …, xintercept, na.rm = FALSE, show.legend = NA)

geom_hline(mapping = NULL, data = NULL, …, yintercept, na.rm = FALSE, show.legend = NA) - mapping : aes()를 사용하여 매핑할 미적 요소, 생략되면 ggplot()에 정의된 미적매핑 사용 - data : 시각화를 위해 사용될 데이터, 생략되면 ggplot()에 정의된 데이터 사용 - … : 미적 요소의 설정 - xintercept : 수직선을 그릴때 사용하는 X 절편값 - yintercept : 수평선을 그릴때 사용하는 Y 절편값 - na.rm : NA 값을 생략할 것인지를 설정하는 논리값

geom_vline()geom_hline()의 사용법을 살펴보기 위해 다음과 같은 산점도를 그려보자.

df_취업률_2000 |> 
  ggplot() +
  geom_point(aes(x = 졸업자수, y = 취업자수))

이제 이 산점도에 X, Y축 값들의 평균에 가로선과 세로선을 표새해보도록 하겠다.

먼저 X축과 Y축 값들에 대한 평균값을 다음과 같이 구한다 .

x_mean <- mean(df_취업률_2000$졸업자수)

y_mean <- mean(df_취업률_2000$취업자수)
df_취업률_2000 |> 
  ggplot() +
  geom_point(aes(x = 졸업자수, y = 취업자수)) + 
  geom_vline(xintercept = x_mean, color = 'red', linetype = 2) +
  geom_hline(yintercept = y_mean, color = 'blue', linetype = 3)

geom_abline()

geom_abline()은 대각선을 그릴때 사용하는 레이어이다. geom_line()도 대각선을 그릴수 있지만 geom_line()은 두 점을 이어주는 선을 그리는 반면 geom_abline()은 일차 방정식 형태의 기울기와 y절편을 사용하여 대각선을 그려준다. 중학교때 배웠다시피 1차 방정식을 통해 직선을 그리기 위해서는 ‘y = ax + b’ 공식에 대입하는데 여기서 a는 기울기를 뜻하고 b는 y절편을 뜻한다. 그래서 geom_abline()으로 이름이 붙여졌다. 그렇기 때문에 당연히 기울기가 0이면 수평선이 그려지고 기울기가 무한대 이면 수직선이 그려진다. geom_abline()에서 기율기는 slope로 y절편은 intercept로 설정한다.

geom_abline(mapping = NULL, data = NULL, …, slope, intercept, na.rm = FALSE, show.legend = NA)
- mapping : aes()를 사용하여 매핑할 미적 요소, 생략되면 ggplot()에 정의된 미적매핑 사용
- data : 시각화를 위해 사용될 데이터, 생략되면 ggplot()에 정의된 데이터 사용
- slope : 선을 그릴 기울기
- intercept : 선을 그릴 Y 절편
- na.rm : NA 값을 생략할 것인지를 설정하는 논리값
- show.legend : 범례를 사용할 것인지를 설정하는 논리값

geom_abline()에서 사용하는 미적 요소는 geom_vline(), geom_hline()과 동일하다.

이번에는 앞서 그렸던 산점도에 선형 회귀분석 결과에 따른 회귀선을 그려보겠다.

먼저 데이터에 대한 선형회귀 모델을 다음과 같다.

lm_model <- lm(취업자수 ~ 졸업자수, df_취업률_2000)

summary(lm_model)
## 
## Call:
## lm(formula = 취업자수 ~ 졸업자수, data = df_취업률_2000)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -120.610   -1.932    0.068    1.975  126.175 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.291736   0.277827    1.05    0.294    
## 졸업자수    0.546750   0.003637  150.33   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.56 on 1998 degrees of freedom
## Multiple R-squared:  0.9188, Adjusted R-squared:  0.9187 
## F-statistic: 2.26e+04 on 1 and 1998 DF,  p-value: < 2.2e-16

이 선형회귀 모델의 결과를 보면 기울기에 해당하는 ’졸업자수’의 회귀계수는 0.546750으로 산출되었고 Y절편 값에 0.291736으로 산출되었다. 이 값들을 다음과 같이 변수에 저장해둔다

a <- lm_model$coefficients[2]

b <- lm_model$coefficients[1]
df_취업률_2000 |> 
  ggplot() +
  geom_point(aes(x = 졸업자수, y = 취업자수)) + 
  geom_vline(xintercept = x_mean, color = 'red', linetype = 2) +
  geom_hline(yintercept = y_mean, color = 'blue', linetype = 3) + 
  geom_abline(slope = a, intercept = b, color = 'dark green', size = 1, linetype = 1)

댓글