/> 忍者ブログ

WEEKEND ECONOMIST

小さな工夫と発見の蓄積

ggplot2(2):ヒストグラム・箱ひげ図

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

ggplot2(2):ヒストグラム・箱ひげ図

ggplot2で、ヒストグラムと箱ひげ図を描く方法。

いずれも1変数の分布を表現する方法だが、ヒストグラムは分布の形状をより詳しく伝え、箱ひげ図はカテゴリ間の分布の差を比べるのに適している。

例として、松坂大輔投手の投球データを用いた(出典, もともとのソースは(株)データスタジアム)。

> head(x)
     game.id picher.id   type speed batter.name runner picher.name
1 2005061405     11715 カーブ   111    赤星 憲広      0   松坂 大輔
2 2005082405     11715 カーブ   111      石本 努      0   松坂 大輔
3 2005032601     11715 カーブ   112    北川 博敏      0   松坂 大輔
4 2005050504     11715 カーブ   112    セギノール      0   松坂 大輔
5 2005053102     11715 カーブ   112        ウッズ     10   松坂 大輔
6 2005053102     11715 カーブ   112    アレックス      0   松坂 大輔
  visitor.id home.id      hv
1          5       7    home
2          8       7    home
3         11       7    home
4          8       7    home
5          7       4 visitor
6          7       4 visitor

(1)
* aes(x)に、分布を調べる変数を指定する。
* colourで外枠、fillで塗りつぶす色を指定する。 
library(ggplot2)
p <- ggplot(x, aes(x=speed)) + 
     ggtitle('松坂大輔投手の球速 2005') + xlab('球速 (km/h)')
p + geom_histogram(binwidth=1, colour='grey5', fill='grey35')


(2) 密度推計を重ねる。
* ..density..というのは定数か何か。こう書くものと覚える。
* sizeで線の太さを変える。
* 白い太めの先に黒い線を重ねて見やすくしている。
p + geom_histogram(binwidth=1, aes(y=..density..), 
                   colour='grey5', fill='grey35') +
    geom_density(colour='azure', size=2) + 
    geom_density(colour='black', size=1.5)


(3) 球種ごとの分布を比べるには・・・
* グループ別の密度推計だけを重ねる。alphaを1より小さい値に指定する(薄く塗りつぶす)と重なった時に綺麗。
* またはfacet_grid()を用いて、球種ごとに描画する。
* 帯グラフっぽく、グループで色分けして重ねる手もある。
p + geom_density(aes(colour=type, fill=type), alpha=.3, size=1) 
p + geom_histogram(binwidth=2, aes(y=..density..), 
                   colour='grey5', fill='grey35') + 
    geom_density() + facet_grid(type ~. )
p + geom_histogram(aes(fill=type), 
                   binwidth=1, stackgroup=T, colour='grey')


(4) カテゴリ変数を増やす。
* facet_grid()の指定を変更する。
* facet_grid()は、欠損値を拾ってしまう、それらを除いたデータを用いて描画する。
p <- ggplot(subset(x, !is.na(hv)), aes(x=speed)) +
     ggtitle('松坂大輔投手の球速 2005') + xlab('球速 (km/h)')
p + geom_histogram(binwidth=2, aes(y=..density..), 
                   colour='grey5', fill='grey35') +
    geom_density() + facet_grid(type ~ hv)


(5) 比較するカテゴリの数が多いときは、箱ひげ図が有効。
p <- ggplot(subset(x, !is.na(hv)), aes(type, speed)) +
     ggtitle('松坂大輔投手の球速 2005') + xlab('球種') + ylab('球速 (km/h)')
p + geom_boxplot(aes(fill=hv), alpha=0.5) +
    theme(legend.position='bottom', legend.title=element_blank())
x <- read.table('http://blog.cnobi.jp/v1/blog/user/ca2e456143c0d20195537cc5daa5fd14/1396483677', 
                as.is=T, header=T)
names(x) <- c('game.id', 'picher.id', 'type', 'speed', 'batter.name', 
'runner', 'picher.name', 'visitor.id', 'home.id') x$hv <- NA x$hv[x$home.id %in% 7] <- 'home' x$hv[x$visitor.id %in% 7] <- 'visitor' library(ggplot2) p <- ggplot(x, aes(x=speed)) + ggtitle('松坂大輔投手の球速 2005') + xlab('球速 (km/h)') p + geom_histogram(binwidth=1, colour='grey5', fill='grey35') # ...(1) p + geom_histogram(binwidth=1, aes(y=..density..), colour='grey5', fill='grey35') + geom_density(colour='azure', size=2) + geom_density(colour='black', size=1.5) # ...(2) p + geom_density(aes(colour=type, fill=type), alpha=.3, size=1) # ...(3a) p + geom_histogram(binwidth=2, aes(y=..density..), colour='grey5', fill='grey35') + geom_density() + facet_grid(type ~. ) # ...(3b) p + geom_histogram(aes(fill=type), binwidth=1, stackgroup=T, colour='grey') # ...(3c) p <- ggplot(subset(x, !is.na(hv)), aes(x=speed)) + ggtitle('松坂大輔投手の球速 2005') + xlab('球速 (km/h)') p + geom_histogram(binwidth=2, aes(y=..density..), colour='grey5', fill='grey35') + geom_density() + facet_grid(type ~ hv) # ...(4) p <- ggplot(subset(x, !is.na(hv)), aes(type, speed)) + ggtitle('松坂大輔投手の球速 2005') + xlab('球種') + ylab('球速 (km/h)') p + geom_boxplot(aes(fill=hv), alpha=0.5) + theme(legend.position='bottom', legend.title=element_blank()) # ...(5)
PR

コメント

プロフィール

HN:
KM
性別:
非公開

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30