4 min read

htmlwidget x (Hugo + Blogdown + GitHub Page)

{leaflet}{plotly}で作成したインタラクティブなjavascript系コンテンツをHugo + Blogdown + GitHub Pageに埋め込むときのメモ。

{widjetFrame}がいいみたいなことを{blogdown}作者のYihui氏が書いているが、自分の環境ではなんだかうまくいかなかった。 issueで触れられているwidth = '100%'の問題ではない。 代わりに、ググって引っかかったページを参考に、htmlwidgets::saveWidget()でhtmlとして保存する -> htmlのiframeタグ内で書き込むというアプローチを採用する。

htmlファイルのパスが厄介で、すこし詰まった。 build_site()したときの作業ディレクトリは、それぞれ.Rmdファイルが保存されているパスになるので、そこからの相対パスで考える。 saveWidget()で生成されるAPPNAME.htmlは、build_site()により、APPNAME/index.htmlに変換されるので、serve_site()では確認できないらしい。 leafletフォルダ、plotlyフォルダをcontent以下に作成して個別に管理する。

library(htmlwidgets)

leaflet

今度の学会のフライト経路を表示。

library(leaflet)
library(ggmap) # 地名から緯度経度をとってくる
library(geosphere) # 球体に直線を引く

geo_syd <- geocode("Sydney")
geo_ist <- geocode("Istanbul")

# `ggmap::geocode()`は短時間での使用に制限があるので、ループの力技で解決。
repeat(
  if(is.na(geo_syd$lon)){
    geo_syd <- geocode("Sydney")
  } else {
    break
  }
)

repeat(
  if(is.na(geo_ist$lon)){
    geo_ist <- geocode("Istanbul")
  } else {
    break
  }
)

leaflet_demo <- 
  geosphere::gcIntermediate(p1 = geo_syd, p2 = geo_ist, n = 200, addStartEnd = T) %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addPolylines(color = "black")

# dir.create("../leaflet", showWarnings = FALSE)
setwd("../leaflet")
saveWidget(leaflet_demo, "demo.html", selfcontained = T)
setwd("../post")

plotly

Clarivate analyticsから取ってきたメジャーな雑誌のImpact factorの推移を表示。 念のため雑誌名は匿名化。

library(plotly)

if_data <-
  dir("../../confidential_data/impact_factors/", full.names = T) %>%
    map_df(~ read_csv(., skip = 1, col_types = cols()) %>%
             mutate(year = parse_number(str_sub(..1, -10, -1))) %>%
             mutate_at(.vars = c(1, 3:5), as.numeric)) %>%
  janitor::clean_names() %>%
  mutate(journal = tolower(full_journal_title))
  
high_impact_journals <-
  if_data %>%
  filter(year == 2016, rank <= 30) %>%
  transmute(journal, id = factor(1:30))
  

plotly_demo <-
  if_data %>%
  filter(journal %in% high_impact_journals$journal) %>%
  left_join(., high_impact_journals, by = "journal") %>%
  plot_ly(x = ~ journal_impact_factor, y = ~ eigenfactor_score, size = ~ total_cites,
          color = ~ id, frame = ~ year,
          hoverinfo = "text",
          # text = ~paste(full_journal_title), # 隠し
          text = ~paste(id),
          mode = "markers", type = "scatter", showlegend = F) 


# dir.create(".//plotly", showWarnings = FALSE)
setwd("../plotly")
saveWidget(plotly_demo, "demo.html", selfcontained = T)
setwd("../post")

Shiny

Shinyは独立したhtmlとして出力することができないので、shinyappsあたりでデプロイして引っ張るのがいいらしい。 以下のchunkを追加すると埋め込みまで完了。

knitr::include_app("https://USER_NAME.shinyapps.io/APP_NAME/")

Session info

devtools::session_info()
##  setting  value                       
##  version  R version 3.5.0 (2018-04-23)
##  system   x86_64, darwin15.6.0        
##  ui       X11                         
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  tz       Australia/Brisbane          
##  date     2018-05-19                  
## 
##  package      * version  date       source        
##  assertthat     0.2.0    2017-04-11 CRAN (R 3.5.0)
##  backports      1.1.2    2017-12-13 CRAN (R 3.5.0)
##  base         * 3.5.0    2018-04-24 local         
##  bindr          0.1.1    2018-03-13 CRAN (R 3.5.0)
##  bindrcpp     * 0.2.2    2018-03-29 CRAN (R 3.5.0)
##  blogdown       0.6      2018-04-18 CRAN (R 3.5.0)
##  bookdown       0.7      2018-02-18 CRAN (R 3.5.0)
##  broom          0.4.4    2018-03-29 CRAN (R 3.5.0)
##  cellranger     1.1.0    2016-07-27 CRAN (R 3.5.0)
##  cli            1.0.0    2017-11-05 CRAN (R 3.5.0)
##  colorspace     1.3-2    2016-12-14 CRAN (R 3.5.0)
##  compiler       3.5.0    2018-04-24 local         
##  crayon         1.3.4    2017-09-16 CRAN (R 3.5.0)
##  crosstalk      1.0.0    2016-12-21 CRAN (R 3.5.0)
##  data.table     1.10.4-3 2017-10-27 CRAN (R 3.5.0)
##  datasets     * 3.5.0    2018-04-24 local         
##  devtools       1.13.5   2018-02-18 CRAN (R 3.5.0)
##  digest         0.6.15   2018-01-28 CRAN (R 3.5.0)
##  dplyr        * 0.7.4    2017-09-28 CRAN (R 3.5.0)
##  evaluate       0.10.1   2017-06-24 CRAN (R 3.5.0)
##  forcats      * 0.3.0    2018-02-19 CRAN (R 3.5.0)
##  foreign        0.8-70   2017-11-28 CRAN (R 3.5.0)
##  geosphere    * 1.5-7    2017-11-05 CRAN (R 3.5.0)
##  ggmap        * 2.6.1    2016-01-23 CRAN (R 3.5.0)
##  ggplot2      * 2.2.1    2016-12-30 CRAN (R 3.5.0)
##  glue           1.2.0    2017-10-29 CRAN (R 3.5.0)
##  graphics     * 3.5.0    2018-04-24 local         
##  grDevices    * 3.5.0    2018-04-24 local         
##  grid           3.5.0    2018-04-24 local         
##  gtable         0.2.0    2016-02-26 CRAN (R 3.5.0)
##  haven          1.1.1    2018-01-18 CRAN (R 3.5.0)
##  hms            0.4.2    2018-03-10 CRAN (R 3.5.0)
##  htmltools      0.3.6    2017-04-28 CRAN (R 3.5.0)
##  htmlwidgets  * 1.2      2018-04-19 CRAN (R 3.5.0)
##  httpuv         1.4.3    2018-05-10 cran (@1.4.3) 
##  httr           1.3.1    2017-08-20 CRAN (R 3.5.0)
##  janitor        1.0.0    2018-03-22 CRAN (R 3.5.0)
##  jpeg           0.1-8    2014-01-23 CRAN (R 3.5.0)
##  jsonlite       1.5      2017-06-01 CRAN (R 3.5.0)
##  knitr          1.20     2018-02-20 CRAN (R 3.5.0)
##  later          0.7.2    2018-05-01 cran (@0.7.2) 
##  lattice        0.20-35  2017-03-25 CRAN (R 3.5.0)
##  lazyeval       0.2.1    2017-10-29 CRAN (R 3.5.0)
##  leaflet      * 2.0.0    2018-04-20 CRAN (R 3.5.0)
##  lubridate      1.7.4    2018-04-11 CRAN (R 3.5.0)
##  magrittr       1.5      2014-11-22 CRAN (R 3.5.0)
##  mapproj        1.2.6    2018-03-29 CRAN (R 3.5.0)
##  maps           3.3.0    2018-04-03 CRAN (R 3.5.0)
##  memoise        1.1.0    2017-04-21 CRAN (R 3.5.0)
##  methods      * 3.5.0    2018-04-24 local         
##  mime           0.5      2016-07-07 CRAN (R 3.5.0)
##  mnormt         1.5-5    2016-10-15 CRAN (R 3.5.0)
##  modelr         0.1.1    2017-07-24 CRAN (R 3.5.0)
##  munsell        0.4.3    2016-02-13 CRAN (R 3.5.0)
##  nlme           3.1-137  2018-04-07 CRAN (R 3.5.0)
##  parallel       3.5.0    2018-04-24 local         
##  pillar         1.2.1    2018-02-27 CRAN (R 3.5.0)
##  pkgconfig      2.0.1    2017-03-21 CRAN (R 3.5.0)
##  plotly       * 4.7.1    2017-07-29 CRAN (R 3.5.0)
##  plyr           1.8.4    2016-06-08 CRAN (R 3.5.0)
##  png            0.1-7    2013-12-03 CRAN (R 3.5.0)
##  promises       1.0.1    2018-04-13 CRAN (R 3.5.0)
##  proto          1.0.0    2016-10-29 CRAN (R 3.5.0)
##  psych          1.8.3.3  2018-03-30 CRAN (R 3.5.0)
##  purrr        * 0.2.4    2017-10-18 CRAN (R 3.5.0)
##  R6             2.2.2    2017-06-17 CRAN (R 3.5.0)
##  RColorBrewer   1.1-2    2014-12-07 CRAN (R 3.5.0)
##  Rcpp           0.12.16  2018-03-13 CRAN (R 3.5.0)
##  readr        * 1.1.1    2017-05-16 CRAN (R 3.5.0)
##  readxl         1.1.0    2018-04-20 CRAN (R 3.5.0)
##  reshape2       1.4.3    2017-12-11 CRAN (R 3.5.0)
##  RgoogleMaps    1.4.1    2016-09-18 CRAN (R 3.5.0)
##  rjson          0.2.18   2018-05-05 CRAN (R 3.5.0)
##  rlang          0.2.0    2018-02-20 CRAN (R 3.5.0)
##  rmarkdown      1.9      2018-03-01 CRAN (R 3.5.0)
##  rprojroot      1.3-2    2018-01-03 CRAN (R 3.5.0)
##  rstudioapi     0.7      2017-09-07 CRAN (R 3.5.0)
##  rvest          0.3.2    2016-06-17 CRAN (R 3.5.0)
##  scales         0.5.0    2017-08-24 CRAN (R 3.5.0)
##  shiny          1.1.0    2018-05-17 cran (@1.1.0) 
##  snakecase      0.9.1    2018-03-25 CRAN (R 3.5.0)
##  sp             1.2-7    2018-01-19 CRAN (R 3.5.0)
##  stats        * 3.5.0    2018-04-24 local         
##  stringi        1.2.2    2018-05-02 cran (@1.2.2) 
##  stringr      * 1.3.1    2018-05-10 cran (@1.3.1) 
##  tibble       * 1.4.2    2018-01-22 CRAN (R 3.5.0)
##  tidyr        * 0.8.0    2018-01-29 CRAN (R 3.5.0)
##  tidyverse    * 1.2.1    2017-11-14 CRAN (R 3.5.0)
##  tools          3.5.0    2018-04-24 local         
##  utils        * 3.5.0    2018-04-24 local         
##  viridisLite    0.3.0    2018-02-01 CRAN (R 3.5.0)
##  withr          2.1.2    2018-03-15 CRAN (R 3.5.0)
##  xfun           0.1      2018-01-22 CRAN (R 3.5.0)
##  xml2           1.2.0    2018-01-24 CRAN (R 3.5.0)
##  xtable         1.8-2    2016-02-05 CRAN (R 3.5.0)
##  yaml           2.1.18   2018-03-08 CRAN (R 3.5.0)