これです:
GitHub - abikoushi/ggbrick: An R package for brick plot
ggtetrisって名前にしようかと思ったんだけど、もうある(GitHub - EmilHvitfeldt/ggtetris: Create Tetris Chart Visualizations in R)みたいなので、ggbrickにしました。
brickはレンガっていう意味らしいです。
マニュアルは気が向いたときにちょっとずつ書きます。
インストールは
devtools::install_github("abikoushi/ggbrick")
で多分いけます。
入ってる関数は基本的にはgeom_brickだけです。
気が向いたら触ってみて変なところを教えていただけると嬉しいです。
以下デモです。
基本的な使い方はこう。
library(ggplot2) library(ggbrick) ggplot(data = iris) + geom_brick(aes(y = Sepal.Length, x=Species), binwidth = 0.1)
引数binwidthまたはbinsでビンの幅を変えられます。
ggplot(data = iris) + geom_brick(aes(y = Sepal.Length, x=Species), binwidth = 0.5)
塗りつぶし。
ggplot(data = iris) + geom_brick(aes(y = Sepal.Length, x=Species), binwidth = 0.5, fill = "black")
色を変えてサブカテゴリを積み上げることができます。
ggplot(data = mpg,aes(y = cty, x=factor(year), fill=factor(cyl))) + geom_brick(binwidth = 1)
引数stackgroupsをFALSEにすると積み上げません。
ggplot(data = mpg,aes(y = cty, x=factor(year), fill=factor(cyl))) + geom_brick(binwidth = 1, stackgroups = FALSE, alpha = 0.5)
でも見づらいのであんまり使わないかも。
stackdirを"centerwhole"にするとバイオリンプロットライクに左右にブロックを積みます。
ggplot(data = mpg,aes(y = cty, x=factor(year), fill=factor(cyl))) + geom_brick(binwidth = 1, stackgroups = FALSE, alpha = 0.5, stackdir = "centerwhole", position = position_dodge(0.5))
横向きにしたいときはcoord_flipで。
ggplot(data = diamonds, aes(x = color, y=carat, colour=cut)) + geom_brick(binwidth=0.2) + coord_flip()
stat_summaryと合わせてメディアンを表示。
ggplot(data = iris,aes(y = Sepal.Length, x=Species)) + geom_brick(binwidth = 0.1, stackdir = "centerwhole")+ stat_summary(fun.y = median, fun.ymin = median, fun.ymax = median, geom = "crossbar")
当たり前かもしれませんがfacetもできます。
iris2 <- tidyr::gather(iris,key,value,-Species) ggplot(data = iris2,aes(y = value, x=Species)) + geom_brick(binwidth = 0.3,fill="black")+ facet_wrap(~key,scales = "free_y")
アンスコム的な例
geom_brickを使うとなにが嬉しいかを示したいので、もう一つ例を追加します。
geom_brickはgeom_violinやgeom_boxplotの有力な代替案になりうると考えています。
下記のページから入手できるデータセットをいくつかの方法で図示してみます。
Same Stats, Different Graphs
まずはgeom_jitterです。
データに忠実な視覚化です。ただし点の数が多くなると頻度を把握しづらい面があります。
次に同じデータの箱ひげ図(geom_boxplot)です。
このデータは要約統計量にしてしまうと、分布の違いがまったく見て取れません。
geom_brickです。
分布が直感的にわかると思います。
最後にバイオリンプロット(geom_violin)です。
もちろん悪くはないですが、やや平滑化しすぎる傾向がある気がします。まったく点のないところにも少しデータがありそうに見えます。
作図のための R のコードは以下の通りです:
library(tidyverse) library(ggbrick) dat <- read_tsv("~/Downloads/SameStatsDataAndImages/datasets/BoxPlots.tsv") dat_t <- gather(dat,key,value,-X1) ggplot(dat_t,aes(x=key,y=value))+ geom_jitter() ggplot(dat_t,aes(x=key,y=value))+ geom_boxplot() ggplot(dat_t,aes(x=key,y=value))+ geom_brick() ggplot(dat_t,aes(x=key,y=value))+ geom_violin()