[R] plotly 패키지로 인터랙티브 그래프 만들기
인터랙티브 그래프란?
마우스 움직임에 반응하여 실시간으로 변하는 그래프를 의미합니다.
그래프 결과를 HTML파일로 저장하면, R을 사용하지 않는 일반 사용자들도 그래프를 조작할 수 있습니다.
1. iris 데이터로 인터랙티브 그래프 만들기
패키지 설치
install.packages("plotly")
library(plotly)
그래프 만들기
iris 데이터를 이용해서 간단하게 산점도를 그려보겠습니다.
x축은Sepal.Length, y축은 Petal.Width로 설정하고 색상은 Species에 따라 다른 색으로 표현하겠습니다.
*geom_point()는 그래프를 산점도로 나타내고 싶을때 사용하는 함수입니다.
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Width,
col = Species)) + geom_point()
인터랙티브 그래프 만들기
ggplot()으로 그래프를 만들고 {plotly}패키지의 ggplotly를 적용해주면 간편하게 인터랙티브 그래프를 만들 수 있습니다.
ggplotly(p)
HTML로 저장하기
Export > Save as Web Page...
위에서 언급한것 처럼, HTML로 저장해주면 R을 사용하지 않는 사용자도 R에서 처럼 동일하게 조작할 수 있습니다.
[HTML 파일]
2. 코로나 데이터로 인터랙티브 그래프 만들기
코로나 데이터를 활용해서 시간에 따른 확진자, 완치자, 사망자 수의 변화 추이를 알아 볼 수 있는 라인그래프를 만들어 보겠습니다.
데이터 준비 및 패키지 설치
https://dacon.io/competitions/official/235590/data
월간 데이콘 코로나 데이터 시각화 AI 경진대회 - DACON
분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.
dacon.io
위 사이트에 접속하여 Time 데이터를 다운받아주세요.
# 패키지 불러오기
library(dplyr)
library(tidyr)
library(ggplot2)
library(lubridate)
library(plotly)
## 데이터 불러오기
# 작업 폴더 지정
setwd("경로")
# 데이터 불러오기
time <- read.csv("Time.csv")
head(time)
date time test negative confirmed released deceased
1 2020-01-20 16 1 0 1 0 0
2 2020-01-21 16 1 0 1 0 0
3 2020-01-22 16 4 3 1 0 0
4 2020-01-23 16 22 21 1 0 0
5 2020-01-24 16 27 25 2 0 0
6 2020-01-25 16 27 25 2 0 0
[Time 데이터 설명]
test : 누적 검사자 수
negative : 누적 음성자 수
confirmed : 누적 양성자 수
released : 누적 완치자 수
deceased : 누적 사망자 수
데이터 정제
time 데이터에서 필요한 변수인 date, confirmed, released, deceased 만 추출하겠습니다.
gather 함수를 사용해서 해당 날짜의 환자수를 상태별로 집계해보겠습니다.
time <- time %>% select(date, confirmed, released, deceased) # time 데이터에서 변수를 선택하여 저장
time <- time %>% gather(state, number, -date) # date를 제외한 나머지 변수를 number형태로 모아 state변수를 생성
time$date <- as.Date(time$date) # 날짜 형식으로 변환
head(time)
date state number
1 2020-01-20 confirmed 1
2 2020-01-21 confirmed 1
3 2020-01-22 confirmed 1
4 2020-01-23 confirmed 1
5 2020-01-24 confirmed 2
6 2020-01-25 confirmed 2
그래프 만들기
date를 x축에 확진자 수를 y축에 두고 state에 따라 색이 다른 라인 그래프를 만들어 보겠습니다.
p <- ggplot(time, (aes(x = date, y = number, color = state))) + # x축은 date, y축은 number, state에 따라 색을 다르게 지정
geom_line(lwd = 2) + # line graph 형태로 표현 , 선굵기 지정
scale_x_date(breaks = "month") + # x축을 한달 단위로 표시
xlab(label = "날짜") + # x축, y축의 라벨 지정
ylab(label = " ") +
ggtitle("누적 확진자,완치자,사망자 수") + # 제목 지정
theme(text=element_text(color="grey50")) + # 텍스트 색 지정
theme(axis.title=element_text(size=15)) + # 축 제목 크기 지정
theme(plot.title=element_text(hjust=0.5,size=20, color="royalblue4")) # 제목의 위치, 크기, 색 지정
ggplotly(p)
[HTML 파일]