반응형

[R] [plot() 함수] 추세선 그리기 - plot(), abline()

 

앞선 포스팅에서 산점도를 그리는 방법을 소개하였다.(2022.12.07 - [[R] 그래프 작성] - [R] [plot() 함수] 산점도 그리기 (1) - plot(), colors())산점도를 그리고 난 뒤에는 추세선을 같이 그리기도 하는데, 추세선을 그리는 방법은 여러 가지가 있다. 여기에서는 선형 추세선을 그리는 법에 대해 소개하겠다.

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.12.18)

 

분석용 데이터 (update 22.12.18)

2022년 12월 18일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 상관분석 - 반복 측정 자료

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

목표: SBP와 CVD_RISK의 산점도를 그리고, 가장 잘 표현하는 추세선을 그려라

산점도 그리기- 코드

plot(df$SBP, df$CVD_RISK)

결과

 

이 둘은 어떤 선형 관계가 있는 것 같고 그 관계식을 구하는 법은 선형 회귀분석이다. 이는 다음 링크를 확인하길 바란다. 2022.12.22 - [선형 회귀 분석/R] - [R] 단순 선형 회귀 분석 (Simple linear regression) - lm()

우리는 다음 선형 회귀 분석을 통해 y절편이 23.036415, 기울기가 1.101935임을 알 수 있다.

선형 회귀 분석 코드

LR_SBP_CVD<-lm(CVD_RISK~SBP, data=df)
LR_SBP_CVD$coefficients

결과

(Intercept)         SBP 
  23.036415    1.101935

 

추세선 그리기

선형 추세선은 abline()이라는 함수를 이용한다. abline의 첫 번째 자리에는 y절편을, 두 번째 자리에는 x절편을 넣으면 된다. 

abline(23.036415, 1.101935)

결과

그런데, 색깔이 표본의 색과 검은색으로 같아 눈에 잘 띄지 않는다. 색깔은 파란색으로 바꿔주도록 한다. 색깔에 관한 내용은 다음 포스팅을 참고하길 바란다.2022.12.07 - [[R] 그래프 작성] - [R] [plot() 함수] 산점도 그리기 (1) - plot(), colors()

 

그리고, 너무 얇아 티가 나지 않으므로 "lwd"라는 옵션을 사용하여 선의 굵기 (Line WiDth)를 조정하겠다. 숫자를 바꿔가며 본인에게 맞는 굵기를 정하면 된다. 필자는 3으로 하겠다.

 

코드

abline(23.036415,1.101935, col="blue", lwd=3)

결과

 

 

추세선을 그리는 다른 방법

"23.036415","1.101935"라는 숫자를 적기가 너무 귀찮을 수도 있다. 이 값들은 각각 LR_SBP_CVD$coefficients의 첫 번째, 두 번째 값이므로 다음과 같이 표현할 수도 있다.

abline(LR_SBP_CVD$coefficients[1],LR_SBP_CVD$coefficients[2], col="blue", lwd=3)

혹은 그냥 단순 선형 회귀 분석을 저장한 객체를 넣는 것도 방법이 된다.

abline(LR_SBP_CVD, col="blue", lwd=3)

위 두개 코드는 같은 결과를 내준다.

 

[R] [plot() 함수] 추세선 그리기 정복 완료

작성일: 2022.12.22.

최종 수정일: 2022.12.23.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형
반응형

R에서 기본으로 제공하는 함수인 plot()은 그 기능이 매우 막강하여 산점도뿐만 아니라 수많은 종류의 그래프를 그릴 수 있게 해 준다. plot()이 할 수 있는 범주는 매우 막대하므로, 우선 산점도에 대한 내용만 다루기로 한다. 산점도만 다룬다고 쳐도, 이번 포스팅 한 번으로 끝날 것 같지 않아 몇 차례에 나눠 소개하고자 한다.

 

목차

1. 산점도 그리기 plot() (1)

1) plot()의 기본 원리 - 점 찍기

2) 제목과 부제목

 

1) plot()의 기본 원리 - 점찍기

 plot()에 점의 좌표를 입력하면 좌표평면에 점을 찍어준다. 예를 들어 (3,2)에 점을 찍고 싶다면 다음 코드를 실행하면 된다.

plot(3,2)

 

만약 여러 개의 점을 찍고 싶다면 어떻게 해야 할까? plot() 함수의 첫 번째 argument는 x좌표, 두 번째 argument는 y좌표다. 다음과 같이 4개의 점을 찍으려는 상황을 상정해보자.

x y
1 2
4 3
2 6
6 2

 x좌표를 하나의 벡터로 모아 c(1,4,2,6)을 plot()의 첫 번째 자리에, y좌표를 하나의 벡터로 모아  c(2,3,6,2)를 plot()의 두 번째 자리에 넣으면 된다.

plot(c(1,4,2,6),c(2,3,6,2))

혹은 c(1,4,2,6)을 x라는 객체에 저장하고, c(2,3,6,2)를 y라는 객체에 저장하여 x와 y로 plot() 함수를 구동할 수도 있다. 그러면 각 축의 이름이 달라지는 것을 볼 수 있다. 이 plot(x,y)를 이번 포스팅 내내 쭉 사용할 것이다.

x<-c(1,4,2,6)
y<-c(2,3,6,2)
plot(x,y)

혹은 이런 데이터 프레임이 df로서 주어졌다면 df의 x와 y를 불러와 그릴 수도 있다. 

x y
1 2
4 3
2 6
6 2

x와 y를 열로서 합쳐(cbind) 데이터프레임 df를 만들고(data.frame), 이로 산점도를 그리면 다음과 같다.

x<-c(1,4,2,6)
y<-c(2,3,6,2)
df<-data.frame(cbind(x,y))
plot(df$x,df$y)

2) 제목과 부제목

 (1) 제목과 부제목 달기

위 그래프에는 제목과 부제목이 없어 무엇을 나타내는 것인지 알 수가 없다. 이 그래프가 2022년 1월부터 6월까지 환자 A의 알코올 중독 점수 (AUDIT)을 나타낸 것이라면 제목을 "AUDIT Trend", 부제목을 "2022, JAN-JUN"라고 달고 싶을 것이다. 그럴 때에는 "main"과 "sub" argument를 이용하면 된다.

plot(x,y,main="AUDIT Trend", sub="2022, JAN-JUN")

 

 (2) 제목과 부제목 색깔 바꾸기

제목과 부제목의 색을 바꾸기 위해서는 어떤 색을 선택할 수 있는지 알아야 한다. 수많은 색을 선택할 수 있지만 R에서 기본으로 제공하고 있는 색은 657개며, 웬만한 경우 이 정도면 충분할 듯하다. 657개의 색을 확인하는 방법은 다음과 같다.

colors()
 [1] "white"                "aliceblue"            "antiquewhite"        
  [4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
  [7] "antiquewhite4"        "aquamarine"           "aquamarine1"         
 [10] "aquamarine2"          "aquamarine3"          "aquamarine4"         
 [13] "azure"                "azure1"               "azure2"              
 [16] "azure3"               "azure4"               "beige"               
 [19] "bisque"               "bisque1"              "bisque2"             
 [22] "bisque3"              "bisque4"              "black"               
...

 

이중에 "blue", "orange"를 각각 제목과 부제목의 색으로 하고자 한다. 이때에는 각각 col.main, col.sub이라는 argument를 사용하면 된다.

plot(x,y,main="AUDIT Trend", sub="2022, JAN-JUN", col.main="blue", col.sub="orange")

 

 (3) 제목과 부제목의 크기 바꾸기

 제목의 크기는 키우고, 부제목의 크기는 줄이고 싶다면, 각각 cex.main, cex.sub argument를 사용하면 된다.

plot(x,y,
     main="AUDIT Trend", sub="2022, JAN-JUN", 
     col.main="blue", col.sub="orange", 
     cex.main=1.5, cex.sub=0.5)

cex.main의 default값은 1.2, cex.sub의 default값은 1이다. 키우면 글자의 크기도 커지고, 줄이면 글자도 작아진다.

 

[R] [plot() 함수] 산점도 그리기 (1) 정복 완료!

 

작성일: 2022.12.07.

최종 수정일: 2022.12.07.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형

+ Recent posts