시각화에는 기본 시각화 함수와 ggplot2 패키지가 있다.
우선 기본 시각화 함수로 여러 그래프를 출력해보도록 하겠다.
1. 선 그래프(산점도): 분포를 확인하거나 x축과 y축의 상관관계를 시각화하는 기법 중 하나로, 고른 분포를 띄는지, 특정한 분포를 보이는지, x와 y가 어떤 관계를 보이는지 등을 알 수 있다.
plot(x, # x축 좌표
y= NULL, # y축 좌표
type ='p', # 그래프 타입(p: 산점도, l: 선그래프, ....)
xlim = NULL, # x축 좌표 범위(예: 1~100중 50~60만 보고 싶을 때)
ylim = NULL, # y축 좌표 범위(예: 1~100중 50~60만 보고 싶을 때)
log = '', # y축 좌표를 log로 쓸 것인가
main = NULL, # main 제목
sub = NULL, # sub 제목
xlab = NULL, # x축 제목
ylab = NULL, # y축 제목
ann = par('ann'), # 축 제목 출력 여부
axes = TRUE, # 축 출력 여부
...)
dev.new() 하면 그래픽 새 창이 활성화 되며
아무 옵션없이 plot을 그리면 산점도가 출력된다.
cex 옵션을 주면 점 크기가 달라진다.
pch는 점 모양을 바꾸며, point 함수 메뉴얼을 보면 점 모양을 고를 수 있다.
col 옵션으로 점 색을 바꿀 수 있다.
영문으로 색 이름을 적어도 되고, R 내장의 색 번호를 적어도 된다. 그리고 색 코드를 넣으면 좀 더 다채롭게 바꿀 수 있다.
type 옵션으로 선 그래프로 바꿀 수 있다.
type 옵션을 o로 바꾸면 점도 함께 출력된다.
선 그래프 상태에서 lwd 옵션으로 선의 굵기를 바꿀 수 있다.
여기까지 벡터의 선그래프 출력 방법이었다.
아래부터는 데이터 프레임의 비교 선 그래프 출력이다.
데이터 프레임의 비교 선 그래프
googleVis::Fruits 데이터를 dcast하여 그래프 출력에 용이하도록 wide형 데이터로 변경한 뒤에 위와 같이 옵션을 주어 아래처럼 그래프를 나타내었다.
범례(legend) : 비교 시각화의 각 범주 class를 설명하는 부분으로, 비교 시각화는 수치형 뿐만 아니라 범주형 데이터에서도 가능하다.
옵션은 아래를 참고하자.
legend(x, # x축 좌표(범례 시작 부분)
y= NULL, # y축 좌표(범례 끝 부분)
legend, # 각 범주 class 값
fill=NULL, # 막대그래프 범례 출력시 채울 색. 막대그래프 출력 시 필수
col = par('col'), # 각 class를 구분할 색
border = 'black', # 테두리
lty, # 선 종류(line type)선 그래프 범례 출력 시 필수
lwd, # 선 두께
pch, # 점 종류(산점도 범례 출력 시 필수)
title = NULL, # 범례 제목
title.col = text.col[1], # 범례 제목 색
totle.adj=0.5, # 범례 제목 좌우 위치
totle.cex = cex[1], # 범례 제목 글자 크기
title.font = text.font[1], # 범례 제목 폰트
...)
위 Fruit2 데이터에 범례를 넣어보았다.
축 눈금
axis(side = , # 방향(x축: 1, y축: 2)
at = , # 눈금 수
labels = ) # 눈금 값
축 눈금은 위의 옵션으로 나타낼 수 있다.
위의 비교 선 그래프에 x축 눈금을 설정하여보자.
위처럼 두 가지 방법이 있는데, sol1로 그리면 ,
이런 축의 그래프가 나오고, sol 2로 그리면
이렇게 출력된다. 나는 sol2 가 좋은 것 같다.
배경색 바꾸기
배경색은 dev.new() 아래에 par()를 추가해주면 된다.
색을 연보라색으로 바꾸어보았다.
연습문제를 하나 풀어보겠다.
data.csv파일을 읽고 월별 총 구직자수 변화 추이를 각 연도별로 비교 시각화 하여라.
위 문제도 long data를 wide 형으로 바꾼 뒤에 옵션을 넣어 그렸다.
많은 그래프를 그리는 경우 lines 가 여러 줄 들어가는데 이때 for문으로 처리가 가능하다고 하여 for문을 적용해서도 테스트 하였다.
for (i in 2:5) {
lines(data2[,i], type = 'o', col=col1[i])
}
글꼴 변경
글꼴은 google font 사용이 가능하며
에서 마음에 드는 글꼴 이름을 골라 R 스크립트 창에서 사용하면 된다.
install.packages('showtext')
library(showtext)
showtext 패키지를 다운받아 로드한 뒤에,
font_add_google(name = , # 폰트이름(실제이름): 다운받을 폰트 실제 명
family= ) # 내가 지정한 이름(저장명): R에서 사용할 폰트명(임의 설정, 생략시 원본 이름과 동일)
위와 같이 지정하면 된다.
나는 위와 같은 폰트를 골라 실행하였다.
그러면 curl 이라는 패키지 실행 요청 메시지가 뜰 거고 해당 라이브러리까지 로드하면 되겠다.
install.packages('curl')
library(curl)
그리고 showtext_auto() 를 실행하면 다운받은 폰트가 적용된다.
실제 적용된 것을 확인하려면 그래픽 창을 닫고 다시 실행하면 된다.
위처럼 title을 넣어보면 폰트가 적용된 것을 확인할 수 있다.
색 표현
색을 표현할 수 있는 방법에는 세 가지가 있다.
1) 기본 색 사용
기본적으로 내장되어 있는 색을 사용하는 것으로 1은 검정, 2는 빨강 3은 초록... 으로 설정되어있다.
기본 색은 보통 분석시 분석 결과를 먼저 파악하기 위하여 사용되는데 iris 예시를 확인해보겠다.
위 코드에서는 plot에 col 옵션으로 iris$Species 만 넣었는데 아래처럼 색이 지정되어 출력되었다. 왜 그럴까.
R에서는 분류분석 시 지금처럼 Y가 factor일 경우가 유리하다. 위와 같이 시각화가 가능하기 때문이다. 각각의 class 별로 서로 다른 color를 볼 수 있다.
fator로 숫자가 들어가기 때문에 색 분류가 된 것이다. 그러므로 col에 숫자 전달 시 그에 매칭되는 색 표현이 가능한 것이다.
2) 사용자 정의 팔레트 구성
사용자가 직접 원하는 색의 벡터(팔레트)를 구성한다. 색상표를 사용하면 보다 다채로운 색의 표현이 가능하다.
Line 1 처럼 사용자 정의 팔레트를 구성하였고, Line3처럼 지정하여, Line 8처럼 나타내었다.
3) 외부 패키지를 사용한 팔레트 구성
install.packages('colorspace')
library(colorspace)
위와 같이 colorspace를 설치 후 로드한다.
그리고 위 코드를 실행해주면 아래와 같은 팔레트 예시들이 나온다.
이 팔레트 사용 방법은 다음과 같다.
나는 Sequential 파트의 BluGrn 색상을 사용하고 싶다.
Line 4처럼 하면 더 크게 Sequential 의 색상표를 확인할 수 있다.
나는 sequential에서 골랐기 때문에 Line 11처럼 옵션을 넣었고, 원하는 색이 qualitative나 diverging에 있다면 Line 7, 8로 각각 사용하면 될 것이다.
그 다음에 Line 15처럼 c1을 each 로 50번 반복한 이유는, 나는 3가지 색을 선택했는데 Species의 factor가 3가지이기 때문이다. factor 3가지가 50개씩 총 150 개로 이루어져 있는데, 만일 times 옵션이 들어가면 색상은 1,2,3,1,2,3,1,2,3 으로 들어가서 분석 결과가 이상하게 나온다.
데이터는 11111111111111~50개, 22222222222~50개, 33333333~50개의 형태로 존재하기 때문에 each 옵션을 사용하여 같은 색이 50개씩 나열되도록 설정하였다.
여러 그래프 출력
par(mfrow =c(1,2)) 함수를 주면 다음과 같이 창이 뜨고, 두 개의 plot을 넣어 그래프를 그릴 수 있다.
눈금 회전
네 개의 plot을 비교해보면 눈금 회전이 네 가지 다 다른 것을 확인할 수 있다.
이 중에 원하는 눈금 방향을 정해서 사용하면 될 것 같다.
다음주에는 ggplot2 패키지로 시각화 하는 걸 배울 것 같다.
'배우기 > 복습노트[R과 분석]' 카테고리의 다른 글
[복습] R(programming language) 시각화(2) (barplot, pie, pie3D) + 하루끝(20231211) (0) | 2023.12.11 |
---|---|
[실습문제] 2023. 12. 8.(금) (2문제) (0) | 2023.12.11 |
[실습문제] 2023. 12. 7.(목) (1문제) (0) | 2023.12.08 |
[복습] R(programming language)의 파일 입출력 + 하루끝(20231207) (0) | 2023.12.07 |
[복습] R(programming language) 데이터 구조 변경(long, wide) (2) (0) | 2023.12.07 |