盆暗の学習記録

データサイエンスを中心として,日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

[R]BBCニュースで使われるグラフを描く{bbplot}パッケージ

BBCニュースで使われるグラフのスタイルを再現する{bbplot}というパッケージの存在を知りました

github.com

ちょっと使ってみたいと思います。

インストールと実行

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()

f:id:nigimitama:20190208191025p:plain

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()

f:id:nigimitama:20190208191040p:plain

英語でなく日本語になるとやっぱり印象が変わりますが,結構綺麗…なのかな?

軸の線を消して横軸だけつくるというのが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()

f:id:nigimitama:20190208191135p:plain

BBCのグラフはsubtitleも使われるので,そこも真似るとより綺麗になるかも。

ただ,このようにBBC的な色合いを持ってくるのはbbc_style()の仕事ではないので,公式のサンプルコードを見ながら色合いを自分で指定するしかないというのがちょっと面倒ですね

まとめ

  • 文字サイズとかのスタイルをBBC風に一括指定できる
    • BBC風の色使いやグラフの装飾は手動
  • でもこれ,Helveticaフォントが格好いいだけでは‥?
    • Windowsだと再現率が低い
    • 日本語だと再現率はさらに下がる
  • 「美しいグラフとは何か」について考える上では大いに参考になる
    • BBCの実際の記事ではplotly的な動的なグラフになっているのでこれが再現できるとさらに綺麗なグラフに近づきそう

参考