そういえばちょっと前にキャプテンアメリカがwaffleというパッケージをつくってて、それの中でFont Awesomeを使ってました。これどうやってるのか調べたのでメモ。
やってることは単純で、
- Font Awesomeをインストール
- extrafontを使ってそれを呼び出す
- ggplotでラベルとフォント名を指定(
family="FontAwesome"
)
という感じです。
RPubs - ggplot2 with FontAwesome
Font Awesome
Font Awesomeは、アイコンとして使えるフォントです。画像ではなくフォントなので、サイズを変えたり色を変えたりできます。
extrafont
extrafontは、Rが標準で使ってる以外のフォントもお手軽に呼び出せるようにするパッケージです。数式用のフォントを使いたいときとかによく使われるみたいです(あんまりよく知らない)。自分で読み込むフォントは、TrueType(拡張子が.ttf
)である必要があります。
Font Awesomeをインストール
Windows(たぶんMacも)
FontAwesomeのサイトからZIPファイルをダウンロードしてきて(どうでもいいけどサブドメイン、Fort awesomeってなんかかっこいい…)、fontawesome-webfont.ttf
をダブルクリックすればインストールボタンが現れるはずです。それをポチればもう準備完了です。
ちなみにWindowsの場合は、たぶんフォントをインストールしなくても使えるっぽかったです。
↓こんな感じ。(これだと一時フォルダが消えたら終わりですけど。。)
library(extrafont) fa_font <- tempfile(fileext = ".ttf") download.file("http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/fonts/fontawesome-webfont.ttf?v=4.3.0", destfile = fa_font, method = "curl") font_import(paths = dirname(fa_font), prompt = FALSE) if (.Platform$OS.type == "windows") loadfonts("win")
そういえばなぜかdownload.file()
のmethod
がデフォルト(たぶん"internal"
?)だとファイルが化けてました。なんでだったんだろう。
Linux
パッケージでインストールする
たとえばUbuntuだとfonts-font-awesome
というパッケージがあるのでそれをインストールすれば終わりです。
# apt-get install fonts-font-awesome
ただしちょっと古かったりすることもあるので、表示したい文字が入ってなかったりするかもしれません。そういう場合は、最新版を手動でインストールします。
手動でインストール
正しい手順はググれば出てくるはず。むりやりRでやるならこうです。
if(!dir.exists('~/.fonts')) dir.create('~/.fonts') download.file("http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/fonts/fontawesome-webfont.ttf?v=4.3.0", destfile = '~/.fonts', method = "curl") # キャッシュを更新 system('fc-cache -vf')
このあとRのセッションを再起動するとフォントをRの中から使えるようになってました。
extrafontを使ってそれを呼び出す
font_import()
という関数でフォントを取り込みますが、何も引数を指定しないとインストールされているフォントをすべて読もうとして時間がかかります。今回はFont Awesomeだけ使えればいいのでそのファイル名を指定します。
library(extrafont) import_font(pattern = "fontawesome-webfont.ttf")
fonts()
に"FontAwesome"
が出てきたら正しくインポートされています。
fonts() #> [1] "FontAwesome"
もしなにかおかしくなったら、extrafontdbパッケージを再インストールすると初期化されます。
install.packages("extrafontdb")
ggplotでフォント名を指定(family="FontAwesome"
)
ラベルに指定するのはUnicode文字です。例えば車だと、
Unicode: f1b9 · Created: v4.1 · Categories: ...
(http://fortawesome.github.io/Font-Awesome/icon/car/)
と書いてあるので、
"\uf1b9"
と書くか、または、いちど16進数としてIntegerに直して、それをUtf8に変換します。
intToUtf8((strtoi("f1b9", 16L)))
これを使うと、こんなグラフが描けます。
library(ggplot2) ggplot(mtcars) + geom_text(aes(mpg, wt, colour = factor(cyl)), label = "\uf1b9", family = "FontAwesome", size = 7)
あんまり使いどころはない気もしつつ。とりあえずメモ。