インタラクティブなグラフ
Text Update: 11/10, 2018 (JST)

データ数が多いグラフやレンジが広いグラフでは値を読み取ることが困難な場合があります。このような場合、インタラクティブに値を表示してくれるグラフを使うと値などが読みやすくなる場合があります。

Packages and Datasets

本ページではR version 3.4.4 (2018-03-15)の標準パッケージ以外に以下の追加パッケージを用いています。
 

Package Version Description
plotly 4.8.0 Create Interactive Web Graphics via ‘plotly.js’
qqplotr 0.0.3 Quantile-Quantile Plot Extensions for ‘ggplot2’
gghighlight 0.1.0 Highlight Lines and Points in ‘ggplot2’
tidyverse 1.2.1 Easily Install and Load the ‘Tidyverse’

また、本ページでは以下のデータセットを用いています。

Dataset Package Version Description
iris datasets 3.4.4 Edgar Anderson’s Iris Data

 

plotly::ggplotly

plotlyパッケージは、パッケージの説明にもあるようにplotly.jsというJavaScriptライブラリによるインタラクティブなグラフを描けるパッケージです。最も簡単な使い方はggplot2オブジェクトをplotly::ggplotly関数に渡すことです。
 

散布図

ggplot2パッケージで描く散布図は以下のようになります。

iris %>% 
  ggplot(aes(x = Sepal.Width, y = Sepal.Length, colour = Species)) +
    geom_point() + 
    geom_smooth(method = "lm", se = FALSE)

 
この散布図をそのままplotly::ggplotly関数に渡すとインタラクティブなグラフに変わります。

(iris %>% 
  ggplot(aes(x = Sepal.Width, y = Sepal.Length, colour = Species)) +
    geom_point() + 
    geom_smooth(method = "lm", se = TRUE)) %>% 
  plotly::ggplotly()
2.02.53.03.54.04.545678
setosaversicolorvirginicaSepal.WidthSepal.LengthSpecies

 

ヒストグラム

ggplot2パッケージで描くヒストグラムは以下のようになります。

iris %>% 
  ggplot(aes(x = Petal.Length, fill = Species)) + 
    geom_histogram(position = "identity", alpha = 0.5)

 
このヒストグラムをそのままplotly::ggplotly関数に渡すとインタラクティブなグラフに変わります。

(iris %>% 
  ggplot(aes(x = Petal.Length, fill = Species)) + 
    geom_histogram(position = "identity", alpha = 0.5)) %>% 
  plotly::ggplotly()
24601020
setosaversicolorvirginicaPetal.LengthcountSpecies

箱ひげ図

ggplot2パッケージで描く箱ひげ図は以下のようになります。

iris %>% 
  ggplot(aes(x = Species, y = Petal.Length)) +
    geom_boxplot(aes(colour = Species))

 
この箱ひげ図をそのままplotly::ggplotly関数に渡すとインタラクティブなグラフに変わります。

(iris %>% 
  ggplot(aes(x = Species, y = Petal.Length)) +
    geom_boxplot(aes(colour = Species))) %>% 
  plotly::ggplotly()
setosaversicolorvirginica246
setosaversicolorvirginicaSpeciesPetal.LengthSpecies

 

facet

facet関数群を適用してもインタラクティブなグラフになります。

(iris %>% 
  ggplot(aes(x = Petal.Width, y = Petal.Length, colour = Species)) +
    geom_point() + 
    geom_smooth(method = "lm", se = FALSE) + 
    facet_wrap(~ Species)) %>% 
  plotly::ggplotly()
0.00.51.01.52.02.52460.00.51.01.52.02.50.00.51.01.52.02.5
setosaversicolorvirginicaPetal.WidthPetal.LengthsetosaversicolorvirginicaSpecies

ヘルパーパッケージ

ggplot2のヘルパーパッケージを利用してもパッケージによってはインタラクティブなグラフになります。

(iris %>% 
  ggplot(aes(Petal.Length, fill = Species)) + facet_wrap(~ Species) +
    geom_histogram(position = "identity", alpha = 0.75) + 
    gghighlight::gghighlight()) %>% 
  plotly::ggplotly()
24601020246246
setosaversicolorvirginicaPetal.Lengthcountsetosaversicolorvirginica

 
このように一部が表示されなくなるケースもあります。

iris %>% 
  tidyr::drop_na(Sepal.Width) %>%
  ggplot2::ggplot(ggplot2::aes(sample = Sepal.Width)) +
    qqplotr::stat_qq_band(distribution = "norm",
                          dparams = list(mean = 0, sd = 1)) +
    qqplotr::stat_qq_line(distribution = "norm",
                          dparams = list(mean = 0, sd = 1)) +
    qqplotr::stat_qq_point(distribution = "norm",
                           dparams = list(mean = 0, sd = 1)) +
    ggplot2::theme_minimal() +
    ggplot2::labs(x = "Theoretical Quantiles", y = "Sample Quantiles")

 

(iris %>% 
  tidyr::drop_na(Sepal.Width) %>%
  ggplot2::ggplot(ggplot2::aes(sample = Sepal.Width)) +
    qqplotr::stat_qq_band(distribution = "norm",
                          dparams = list(mean = 0, sd = 1)) +
    qqplotr::stat_qq_line(distribution = "norm",
                          dparams = list(mean = 0, sd = 1)) +
    qqplotr::stat_qq_point(distribution = "norm",
                           dparams = list(mean = 0, sd = 1)) +
    ggplot2::theme_minimal() +
    ggplot2::labs(x = "Theoretical Quantiles", y = "Sample Quantiles")) %>% 
  plotly::ggplotly()
-2-10122.02.53.03.54.04.5
Theoretical QuantilesSample Quantiles

 
enjoy!  


CC BY-NC-SA 4.0 , Sampo Suzuki