[R]BBCニュースで使われるグラフを描く{bbplot}パッケージ
BBCニュースで使われるグラフのスタイルを再現する{bbplot}というパッケージの存在を知りました
ちょっと使ってみたいと思います。
インストールと実行
ggplotのテーマを一括でセットするbbc_style()という関数がメインの機能のようです。
使い方はggplotの関数に+でつなげるだけ。
# install.packages('devtools') devtools::install_github('bbc/bbplot') library(bbplot) library(tidyverse) ggplot(longley, aes(x = Year, y = GNP)) + geom_line(colour = "#007f7f", size = 1) + geom_hline(yintercept = 0, size = 1, colour="#333333") + labs(title = "GNP", subtitle = "GNP in US, 1947-1962") + bbc_style()

Windowsだと警告がでる
ただし,Windowsの場合,次のような警告がでます
Warning message: In grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : Windows のフォントデータベースにフォントファミリが見付かりません
bbplot()の中身を見てみると,Macの英字フォントのHelveticaが指定されています。
function () { font <- "Helvetica" ggplot2::theme(plot.title = ggplot2::element_text(family = font, (中略) }
上のグラフでは警告を出しつつもHelveticaの代わりにArialフォントを使って実行していたようです。
fontを游ゴシックに書き換えます
# 1. フォントファミリーを定義 windowsFonts(YuGothic = windowsFont("游ゴシック")) # 2. bbc_styleの書き換え bbc_style2 <- function () { font <- "YuGothic" ggplot2::theme(plot.title = ggplot2::element_text(family = font, size = 28, face = "bold", color = "#222222"), plot.subtitle = ggplot2::element_text(family = font, size = 22, margin = ggplot2::margin(9, 0, 9, 0)), plot.caption = ggplot2::element_blank(), legend.position = "top", legend.text.align = 0, legend.background = ggplot2::element_blank(), legend.title = ggplot2::element_blank(), legend.key = ggplot2::element_blank(), legend.text = ggplot2::element_text(family = font, size = 18, color = "#222222"), axis.title = ggplot2::element_blank(), axis.text = ggplot2::element_text(family = font, size = 18, color = "#222222"), axis.text.x = ggplot2::element_text(margin = ggplot2::margin(5, b = 10)), axis.ticks = ggplot2::element_blank(), axis.line = ggplot2::element_blank(), panel.grid.minor = ggplot2::element_blank(), panel.grid.major.y = ggplot2::element_line(color = "#cbcbcb"), panel.grid.major.x = ggplot2::element_blank(), panel.background = ggplot2::element_blank(), strip.background = ggplot2::element_rect(fill = "white"), strip.text = ggplot2::element_text(size = 22, hjust = 0)) }
折れ線グラフ
ggplot(longley, aes(x = Year, y = GNP)) + geom_line(colour = "#007f7f", size = 1) + geom_hline(yintercept = 0, size = 1, colour="#333333") + labs(title = "アメリカのGNPの推移(1947-1962)") + bbc_style2()

英語でなく日本語になるとやっぱり印象が変わりますが,結構綺麗…なのかな?
軸の線を消して横軸だけつくるというのがBBCスタイルの模様
棒グラフ
# 前処理 temp <- infert %>% mutate(case = ifelse(case == 1, "症例群", "対照群")) # plot ggplot(temp, aes(x = education, fill = case)) + geom_bar(position = "dodge", size = 1) + geom_hline(yintercept = 0, size = 1, colour="#333333") + labs(title = "教育年数", subtitle = "群別の被験者の教育年数") + scale_fill_manual(values = c("#1380A1", "#FAAB18")) + bbc_style2()

BBCのグラフはsubtitleも使われるので,そこも真似るとより綺麗になるかも。
ただ,このようにBBC的な色合いを持ってくるのはbbc_style()の仕事ではないので,公式のサンプルコードを見ながら色合いを自分で指定するしかないというのがちょっと面倒ですね
まとめ
- 文字サイズとかのスタイルをBBC風に一括指定できる
- BBC風の色使いやグラフの装飾は手動
- でもこれ,Helveticaフォントが格好いいだけでは‥?
- Windowsだと再現率が低い
- 日本語だと再現率はさらに下がる
- 「美しいグラフとは何か」について考える上では大いに参考になる
- BBCの実際の記事ではplotly的な動的なグラフになっているのでこれが再現できるとさらに綺麗なグラフに近づきそう