한눈에 정리하는 ggplot2 를 이용한 R 시각화 기초 1
ggplot2는 R 시각화에서 빠지지 않고 등장하는 시각화 라이브러리이다. ggplot2 라이브러리를 이용해서 할 수 있는 시각화에는 크게 ggplot과 qplot이 있다.
ggplot
내가 원하는 특정 옵션을 상세하게 지정해서 예쁘게 시각화 할 때 사용한다.
qplot
옵션을 상세하게 지정하지 않아도 basic plot 보다 예쁘게 시각화 하고 싶을 때 사용한다.
나의 경우 데이터 기초 분석(EDA)을 할 때는 basic plot과 qplot을 주로 사용하고 보고서나 shiny로 구현할 때는 필요에 따라 ggplot을 사용하는 편인데 이번 포스팅에서는 ggplot만 다루겠다. 일단 ggplot2 패키지를 설치하고 라이브러리를 불러오자.
# ggplot2 패키지 설치하고 라이브러리 불러오기 install.packages("ggplot2") library(ggplot2)
ggplot 계열의 함수는 크게 4가지 종류로 분류할 수 있을 것 같다.
(1) 필수 메인 함수 - ggplot( )
ggplot 사용시 필수로 들어가야 하는 함수로, 시각화할 데이터와 축을 지정한다.
ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) # data = 데이터 # mapping = aes(x = x축변수, y = y축변수)
하지만 위 코드만 실행하면 축과 바탕만 그려질 뿐, 실제 그래프는 아래 그래프 그리기 함수를 추가해 주어야 그려진다.
(2) 그래프 그리기 함수 - geom_그래프 계열
아래 나열한 그래프 외에도 많은 종류의 그래프가 있겠지만 주로 쓰는 종류만 나열한다.
산점도 / 산포도 geom_point( )
선 그래프 geom_line( )
박스플롯 geom_boxplot( )
히스토그램 geom_histogram( )
막대 그래프 geom_bar( )
ggplot은 ggplot( ) + geom_point( ) 와 같이 + 기호로 연결해 구문을 작성한다.
ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point()
ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(colour = "red", pch = 2, size = 2) # colour = "색상" # pch = 모양 # size = 크기
ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(colour = c("purple", "blue", "green")[iris$Species], pch = c(0, 2, 20)[iris$Species], size = c(1, 1.5, 2)[iris$Species])
이때 iris$Species의 3가지 범주(카테고리)가 어떤 순서로 옵션이 배정되었는 확인하려면 아래 코드를 실행해보자.
levels(iris$Species)
iris$Species <- as.factor(iris$Species)
그래프를 그리고서 도형으로 사각형으로 특정 구역을 표시하거나 선으로 임계치를 표시하고 싶을 때 사용한다.
선 geom_abline( )
평행선 geom_hline( )
수직선 geom_vline( )
사각형 geom_rect( )
텍스트 geom_text( )
위 함수들을 사용해도 되기는 하지만 실제로 적용시켜보니 투명도 설정에 문제가 있어서 대신 annotate( ) 함수를 소개하려고 한다.
일단 코드를 단순화 하기 위해 앞에서 그렸던 그래프를 g라는 변수에 할당하자.
# 그래프를 g에 할당 g <- ggplot(data = iris, mapping = aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(colour = c("purple", "blue", "green")[iris$Species], pch = c(0, 2, 20)[iris$Species], size = c(1, 1.5, 2)[iris$Species]) # g에 할당된 그래프 출력 g
# ddply 함수를 사용하기 위한 패키지 설치 및 라이브러리 불러오기 install.packages(plyr) library(plyr) # Species별 Sepal.Length, Sepal.Width의 최소값과 최대값을 tmp에 할당 tmp <- ddply(iris, .(Species), summarise, min_x = min(Sepal.Length), max_x = max(Sepal.Length), min_y = min(Sepal.Width), max_y = max(Sepal.Width)) # 도형을 표시할 지점의 좌표를 계산 : 최소값 중에 최대값, 최대값 중에 최소값 start_x <- max(tmp$min_x) end_x <- min(tmp$max_x) start_y <- max(tmp$min_y) end_y <- min(tmp$max_y)
g + annotate(geom = "rect", xmin = start_x, xmax = end_x, ymin = start_y, ymax = end_y, fill = "red", alpha = 0.2, colour = "black", lty = 2) # geom = "도형종류" # xmin = 왼쪽 아래 x좌표 # xmax = 오른쪽 위 x좌표 # ymin = 왼쪽 아래 y좌표 # ymax = 오른쪽 위 y좌표 # fill = "채우기 색" # alpha = 투명도 # colour = "선색" # lty = 선종류
이번에는 4개의 점선으로 모든 iris$Species가 겹치는 구역을 표시해보자.
g + annotate(geom = "segment", x = c(start_x, end_x, -Inf, -Inf), xend = c(start_x, end_x, Inf, Inf), y = c(-Inf, -Inf, end_y, start_y), yend = c(Inf, Inf, end_y, start_y), colour = "black", alpha = 0.5, lty = 2, size = 1) # geom = "도형종류" # x = 선 시작점 x좌표 # xend = 선 종료점 x좌표 # y = 선 시작점 y좌표 # yend = 선 종료점 y좌표 # colour = "선색" # alpha = 투명도 # lty = 선종류 # size = 선두께
이번에는 행 번호로 점에 라벨을 붙여보자. 라벨의 디폴트 위치는 점의 오른쪽 위 대각선 지점이다.
g + annotate(geom = "text", x = iris$Sepal.Length, y = iris$Sepal.Width, label = rownames(iris), colour = "brown", alpha = 0.7, size = 3, hjust = 0.5, vjust = -1) # geom = "도형종류" # x = x좌표 # y = y좌표 # colour = "글씨색" # alpha = 투명도 # size = 글씨크기 # hjust = x축 영점 조절 # vjust = y축 영점 조절
(4) 외부 옵션 함수 - coord_계열, labs 등
축이나 그래프 외부 공간에 옵션을 추가하고자 할 때 사용한다.
축 변환 coord_flip( )
축 범위 coord_cartesian( )
라벨링 labs( )
축 변환부터 해보자. 원래 g그래프는 x축이 Sepal.Length, y축이 Sepal.Width였는데, coord_flip( ) 함수를 사용하면 두 축을 변환하는 효과를 주게 되어서 x축이 Sepal.Width, y축이 Sepal.Length가 된다.
g + coord_flip()
이번에는 축 범위를 바꿔보자. 원래 g그래프는 x축 범위가 4.3 ~ 7.9, y축 범위가 2 ~ 4.4 인데 축 범위를 아까 만들어둔 tmp 데이터로 변경해보자.
g + coord_cartesian(xlim = c(start_x, end_x), ylim = c(start_y, end_y))
마지막으로 라벨링을 해보자. 제목, 부제목, 주석을 달고 축 이름도 변경해보겠다.
g + labs(title = "제목", subtitle = "부제목", caption = "주석", x = "x축 이름", y = "y축 이름")
이렇게 4단계로 ggplot2에 대하여 한눈에 정리해 보았다.
▼ 추가로 범례를 붙이는 방법, 선 그래프 여러 개 그리기 등 ▼
2017/04/26 - [Analysis/R] - 한눈에 정리하는 ggplot2를 이용한 R 시각화 기초 2
#barchart#barplot#bigdata#boxplot#geom#geom_#ggplot#ggplot2#how to use ggplot2#Plot#r#rstudio#R시각화#Scatterplot#Visualization#그래프#그래프그리기#데이터분석#바차트#바플랏#박스플랏#분석#비주얼라이제이션#빅데이터#빅데이터분석#산점도#산포도#시각화#시각화기초#차트#차트그리기#통계#플랏#플랏그리기#플롯
'회사생활 > R' 카테고리의 다른 글
로컬에서 데이터 불러오기 / 데이터 저장하기 (0) | 2017.03.26 |
---|---|
[R 예제 코드] Logistic Regression / 로지스틱 회귀분석 (19) | 2017.03.22 |
[R 예제 코드] KNN / k-NN / k-Nearest Neighber / k-최근접 이웃 (4) | 2017.03.15 |
Train vs. Validation vs. Test Data (0) | 2017.03.14 |
R 시각화 - 산점도 (Basic Scatter Plot) (0) | 2017.03.13 |