昨日はJapan.Rでした。私はまったく仕事しないただの雑用でしたが、@gepuro、@wonder_zone、@kyyonko、@u_riboをはじめとする運営の活躍と、参加者の方の協力によって楽しい時間になりました。ありがとうございました。
さて、LTの終盤、こんな怪しい人が「闇と向き合う」という発表をしていました。
不審者… pic.twitter.com/tXKZh28Bjw
— Minoda Takashi (@aad34210) 2015, 12月 5
ここで思うことはひとつしかありません。
なんて素材価値が高い画像なんだ…!
ここで、実際に闇と向き合うにあたって人は何をするか、考えてみましょう。
闇と向き合うためには、コラ画像をツイートして自らを鼓舞することが必要不可欠です。去年のLTで闇と向き合った話をされていた方も、こんなツイートをしています。
— 忍闍梨卍卍 (@dichika) 2015, 12月 5
ということで、闇と向き合うためにこの画像とまずは向き合ってみることにします。
画像をダウンロード
まずは、素材となる画像をダウンロードします。もちろんRstudioからdownload.file()
します。
download.file("https://pbs.twimg.com/media/CVc3iI1UAAA-9wz.jpg:large", destfile = "yami.jpg")
すると、なぜかよく分からないんですが、画像が壊れてしまいました...。
サツバツとしたTLにグリッチ大仏様JPEGが!!! (https://t.co/U9aYUBZvSA をdownload.file()したらファイルが壊れたのかこうなった。謎だ...) pic.twitter.com/gM26Y4KcTy
— Hiroaki Yutani (@yutannihilation) 2015, 12月 6
これはこれで更なる闇の存在を感じるので、このまま使うことにします。
画像の読み込み
jpegパッケージで読み込みます。
img <- jpeg::readJPEG("yami.jpg")
画像をプロットする
画像をプロットするのは、色々方法があるとは思いますが、使い慣れてるのでggplot2を使います。
ラスター画像をプロットするためにannotation_raster()
というものが用意されています。画像をプロット領域いっぱいに表示するには
annotation_raster(img, -Inf, Inf, -Inf, Inf)
のように、xmin, xmax, ymin, ymax
にInf
/-Inf
を指定します。
これだけではプロットできないので、適当なダミーデータをggplot()
に渡してつなげます。
ggplot(data.frame(x=0,y=0),aes(x,y)) + annotation_raster(img, -Inf, Inf, -Inf, Inf)
すると、こんな感じの結果が出てくるはずです。
文字をプロットする
文字をプロットするのはannotate()
です。
ggplot(data.frame(x=0,y=0),aes(x,y)) + annotation_raster(img, -Inf, Inf, -Inf, Inf) + annotate("text", label = "Why are you...", x = 0, y = 0, colour = "white", size = 20)
ここで、x
とy
を指定していますが、プロットの領域に表示されるxとyの範囲は自動で変わってしまうので、xlim()
、ylim()
で固定します。(ggplot2 1.1.0ならlims()
という関数もあります)
ggplot(data.frame(x=0,y=0),aes(x,y)) + annotation_raster(img, -Inf, Inf, -Inf, Inf) + annotate("text", label = "Why are you...", x = 0.5, y = 0.7, colour = "white", size = 20) + xlim(0, 1) + ylim(0, 1)
X軸、Y軸を取り除く
x軸とかy軸が邪魔です。私たちは闇と直接向き合いたいのです。x軸やy軸に邪魔だてされる筋合いはありません。
そんなとき、ggplot2 1.1.0なら、theme_void()
というものが用意されています。
New
theme_void()
is completely empty. It's useful for plots with non- standard coordinates or for drawings (@jiho, #976). (https://github.com/hadley/ggplot2/blob/master/NEWS.md#new-and-updated-themes)
これで完成です。
ggplot(data.frame(x=0,y=0),aes(x,y)) + annotation_raster(img, -Inf, Inf, -Inf, Inf) + annotate("text", label = "Why are you...", x = 0.5, y = 0.6, colour = "white", size = 20) + xlim(0, 1) + ylim(0, 1) + theme_void()
闇と向き合えそうな気がしてきたところで、これをパッケージにしました。
mukiauパッケージ
インストール
※これはtheme_void()
を使っているので、開発版のggplot2のインストールが必要です。
devtools::install_github("yutannihilation/mukiau")
使い方
mukiau()
に、闇と向き合うにあたって叫びたい呪文を入れます。
mukiau("なぜあなたはCP932などを使うのですか?")
折り返しの文字数はwrap_width
引数に指定できます。折り返しは区切り文字で折り返すようになっていますが、force_wrap
引数にTRUE
を設定すると強制的にその文字数で折り返します。日本語などはTRUE
の方がいいでしょう。
mukiau("なぜあなたはCP932などを使うのですか?", wrap_width = 15, force_wrap = TRUE)
Enjoy in the dark!!!