본문 바로가기

Tech/시각화

R로 로지스틱 함수 그래프 그리기

0. Introduction

로지스틱 회귀분석 정리하다가 설명을 위해 로지스틱 함수 그래프를 그렸다. 처음엔 왕 간단하게 ggplot2로 해결하려다가 이왕 블로그에 올리는 거니 쪼금 예쁘게 그려야지 하다가 좀 길어졌다. 고로 어떻게 쪼금이나마 예쁘게 그렸는지를 보여주려고 한다!

아래는 단계별로 그래프가 어떻게 변화했는지를 보여준다.

왼쪽 -> 오른쪽

사실 큰 차이는 없고 ㅎㅎ 그냥 어떻게하면 그래프가 좀 깔끔해질까를 고민하다가 만든거다. 아무것도 안하고 그냥 고대로 쓰면 맨 왼쪽이고, 조금 신경쓰면 오른쪽이니 각자 성향껏 그래프를 맘대로 만져보자는 취지!

1. ggplot2의 원리

왜 다짜고짜 ggplot의 원리를 알아보자고 하냐면 'R은 시각화가 빵빵해 = ggplot2을 써!' 나 다름없기 때문이다. 근데 또 막상 ggplot2을 쓰려고 하면 이것저것 기능들이 엄청 많은데, 이걸 다 알아야하나 싶고...하다가 ggplot2의 원리를 한번 이해하고 나니까 사용하기가 심적으로(?) 편해졌다고 해야하나...(먼산) 그래서 첫글인만큼 먼저 설명하고 넘어가려 한다.

 

"ggplot2은 layer구조다."

 

설명끝 포토샵처럼 층을 하나둘씩 쌓아간다고 생각하면 된다. 왜 쓰다보면 ggplot(~) + geom_line() + $ \cdots $ 하면서 쌓아가지 않는가. 여기서 +가 바로 층을 쌓는다는 개념이다.

 

한번에 데이터도 세팅하고, 예쁘게 꾸미고, label도 바꾸고, legend도 바꾸고, theme도 기본 grey말고 흰색으로 바꾸고, 이왕 넣을꺼 smooth도 넣어서 통계적으로 좀 있어보이게 해보고
$$ \vdots $$

하다가 머리만 아프고 어떻게 쓸지 막막해 진다는거! 순차적으로 단계를 나누고 접근하면 좀 더 다루기 편해지는게 ggplot2라고 (나는) 생각한다

2. 로지스틱 함수 그리기

위 원리를 활용해서 크게 3단계로 나눠서 접근해보았다.

0. 그 전에 데이터 세팅부터 하자

x <- seq(-10,10,0.01)
y <- 1/(1+exp(-x)) #요게 로지스틱 함수식
df <- data.frame(y,x)
df

첫줄의 seq함수는 자세하게는 seq(from = -10, to = 10, by=0.01)으로 -10부터 10까지 0.01씩 증가하는 수열을 뽑아내는 함수다. 즉, x값으로 해당 수열값을 넣는다는 의미!

 

1. 기본 틀 짜기(데이터 넣기, 원하는 그래프 얹기)

base <- ggplot(df, aes(x=x, y=y)) # 사용할 데이터는 df이며, x,y를 축으로 하는 그래프를 그린다
    + geom_line(color = "blue") # 그래프의 선 색은 'blue'로 설정한다
    + xlim(-5,5) + ylim(-1.3,1.3) # 각 x, y축의 범위를 설정한다.
    + geom_hline(yintercept = 0) + geom_vline(xintercept = 0) # 각 x(y=0), y(x=0)축을 그래프에 표시한다.

ggplot()안에 aes는 aesthetic의 줄임말로 그래프에 추가할 미적인 영역을 설정하는 구역이다. 가령 x축으로는 df의 x라는 열을, y축으로는 df의 y라는 열을 쓰겠다는 걸 정하고 싶을 때 쓰인다.

 

선 색은 파랑이로 넣었고, x축 y축 범위를 지정하고 싶어서 xlim, ylim을 썼다. 또 x축이랑 y축을 찐하게 표현하고 싶어서geom_hline, geom_vline을 사용해서 선을 그었다. 

 

 

2. 라벨 수정하기

labelled <- base + labs(x="z" ,y = "g(z)", title = "logistic function")

labs를 쓰면 한번에 라벨들을 붙일 수 있어서 좋다

여기서는 따로 legend가 필요없어서 안 썼다. 나중에 legend 쓰게될 때 다뤄보는 걸루!

 

 

3. theme 수정하기

styled <- labelled + theme_light() 
    + theme(plot.title = element_text(face = "bold", size = 11, hjust = 0.5))

default theme은 theme_grey다 theme 종류는 딥따 많으니 원하는 걸 선택해서 쓰면 된다. 개인적으로 깔끔한 거 좋아하는 사람들은 theme_bw, theme_light, theme_classic 추천한다.

 

 

왼쪽부터 차례대로 bw, light, classic이다. 나는 가운데꺼로 선택했다

 


일단 첫번째 시각화 글은 이걸로 끝이다. 모두 예쁜 그래프 그려요! 얍!

'Tech > 시각화' 카테고리의 다른 글

[Python] matplotlib에서 한글폰트 사용하기  (0) 2020.07.30
Intro to Visualization  (0) 2020.04.20