12. 인터랙티브 그래프

마우스 움직임에 반응해 실시간으로 형태가 변하는 인터렉티브 그래프를 만드는 방법을 알아봅시다.

인터렉티브 그래프란, 마우스 움직임에 반응하여 실시간으로 형태가 변하는 그래프를 말합니다. 인터렉티브 그래프를 만들면 그래프를 자유롭게 조작하면서 관심 있는 부분을 자세히 살펴볼 수 있습니다. 그래프를 HTML 포맷으로 저장하면, 일반 사용자들도 웹 브라우저를 이용해 그래프를 조작할 수 있습니다.

NP

12-1. plotly 패키지로 인터랙티브 그래프 만들기

인터랙티브 그래프 만들기

패키지 준비하기

install.packages("plotly")
library(plotly)
NP

ggplot으로 그래프 만들기

library(ggplot2)
p <- ggplot(data = mpg, aes(x = displ, y = hwy, col = drv)) + geom_point()
print(p)
NP

인터랙티브 그래프 만들기

plot_ly(data = mpg, x = ~displ, y = ~hwy, color = ~drv, type = 'scatter', mode = 'markers')

마우스를 드래그하면 특정 영역을 확대할 수 있습니다. 그래프 위에서 더블클릭하면 다시 원래대로 되돌아옵니다.

NP

HTML로 저장하기

뷰어 창에서 [Export -> Save as Web Page…]를 클릭하면 인터렉티브 그래프를 HTML 포맷으로 저장할 수 있습니다. HTML 파일은 웹 브라우저에서 열어볼 수 있기 때문에 R을 사용하지 않는 사용자들도 그래프를 볼 수 있습니다.

NP

인터랙티브 막대 그래프 만들기

# cut과 clarity 조합별 빈도 계산
diamonds_summary <- diamonds %>%
  count(cut, clarity)

# 인터랙티브 막대 그래프 생성
plot_ly(data = diamonds_summary,
        x = ~cut,
        y = ~n,
        color = ~clarity,
        type = 'bar') %>%
  layout(title = "다이아몬드 Cut별 Clarity 분포",
         xaxis = list(title = "Cut"),
         yaxis = list(title = "빈도"))
NP

12-2. dygraphs 패키지로 인터랙티브 시계열 그래프 만들기

인터랙티브 시계열 그래프 만들기

데이터 준비하기

economics <- ggplot2::economics
head(economics)
## # A tibble: 6 × 6
##   date         pce    pop psavert uempmed unemploy
##   <date>     <dbl>  <dbl>   <dbl>   <dbl>    <dbl>
## 1 1967-07-01  507. 198712    12.6     4.5     2944
## 2 1967-08-01  510. 198911    12.6     4.7     2945
## 3 1967-09-01  516. 199113    11.9     4.6     2958
## 4 1967-10-01  512. 199311    12.9     4.9     3143
## 5 1967-11-01  517. 199498    12.8     4.7     3066
## 6 1967-12-01  525. 199657    11.8     4.8     3018
NP

인터랙티브 시계열 그래프 만들기

plot_ly(economics, x = ~date, y = ~unemploy, type = 'scatter', mode = 'lines', 
        line = list(color = 'blue')) %>% 
    layout(title = "실업자수 변화",
         xaxis = list(title = "날짜"),
         yaxis = list(title = "명"))
NP

여러 값 표현하기

# 인터랙티브 시계열 그래프 생성
plot_ly(economics, x = ~date) %>%
  add_lines(y = ~unemploy/1000, name = '실업률', line = list(color = 'blue')) %>%
  add_lines(y = ~psavert, name = '저축률', line = list(color = 'red')) %>%
  layout(title = "두 시계열 데이터 비교",
         xaxis = list(title = "날짜"),
         yaxis = list(title = "값"),
         legend = list(x = 0.5, y = 0.9))