/> 忍者ブログ

WEEKEND ECONOMIST

小さな工夫と発見の蓄積

ggplot2(1):棒グラフ

×

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

コメント

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

ggplot2(1):棒グラフ

ggplot2はRのグラッフィク・ライブラリの1つだ。あまり詳しい設定をいじらなくても、結構きれいな画像を描画してくれる。しかも、しっかりと仕組みを理解すればかなり自由にカスタマイズすることも可能らしい。一念発起して、ggplot2の習得を目指す。

今回は、棒グラフの描き方。例として、2013年の日本棋院賞金ランキングを使う(出所)。

基本公式
p <- ggplot(data, aes(...))  # オブジェクトの作成
p + geom_bar() ...           # 描画

ポイント
* ggplot関数は、必要なデータが1つのデータフレームに入っているようなときに便利。よりシンプルなqplot関数も用意されているが、より汎用性の高いggplot2を覚えれば、qplotでできることは全てできる。
* ggplotオブジェクトをまず作り、そこにどんどん描画(レイヤー)を足していくイメージ。
* aes (エステティック)は、グラフの構成要素と考えればよい。xは横軸変数、fillは塗りつぶしに使う色など。
* geom_bar関数は、カテゴリごとの個体数を表示するようにデザインされた。
このカテゴリに対応する変数を、aes(x)として指定する。
* 棒の長さに対応する値はデータから個体数を数えて求めるものであって、今回のように値がすでに与えられているようなケースでは少し工夫が必要:横軸変数(順位)をaes(x)に指定し、値変数(賞金額)をaes(weight)に指定する。
* aes変数は、あとから追加できるし、指定を変更することもできる。
* 上から描画を足すことができる。aes変数は原則としてそのまま使われるが、別のものを指定してもいい。




x <- read.table('http://blog.cnobi.jp/v1/blog/user/ca2e456143c0d20195537cc5daa5fd14/1396338447',
                header=F, as.is=T)
names(x) <- c('sei', 'mei', 'shokin', 'shozoku')
x$shokin <- x$shokin/10000
x$rank <- as.factor(1:nrow(x)) # use as category
x$sei <- factor(x$sei, levels=x$sei) # use as category
barwidth <- .3 

library(ggplot2)
library(scales)  # comma() function
p <- ggplot(x, aes(rank, weight=shokin))
p + geom_bar(width=barwidth) + xlab('') + ylab('賞金額(万円)') +
    ggtitle('日本棋院賞金ランキング 2013') +
    scale_y_continuous(labels=comma) # ...(1)

p + geom_bar(aes(fill=shozoku), width=barwidth) +
    xlab('') + ylab('賞金額(万円)') +
    ggtitle('日本棋院賞金ランキング 2013') +
    scale_y_continuous(labels=comma) +
    theme(legend.position='bottom', legend.title=element_blank())
    # ...(2)

p + geom_bar(aes(x=sei), width=barwidth) +
    xlab('') + ylab('賞金額(万円)') +
    ggtitle('日本棋院賞金ランキング 2013') +
    scale_y_continuous(labels=comma)  # ...(3)

p <- p + geom_bar(width=barwidth) +
        xlab('') + ylab('賞金額(万円)') +
        ggtitle('日本棋院賞金ランキング 2013') +
        scale_y_continuous(labels=comma) # 中間地点
p + geom_text(aes(y=shokin, label=sei), 
              col='white', size=5.2, fontface=2) +
    geom_text(aes(y=shokin, label=sei)) # ...(4)

p + geom_bar(width=barwidth) +
    xlab('') + ylab('賞金額(万円)') +
    ggtitle('日本棋院賞金ランキング 2013') +
    scale_y_continuous(labels=comma) +
    geom_text(aes(y=shokin, label=sei), vjust=-0.1) # ...(5)

p + geom_bar(width=barwidth) + xlab('') + ylab('賞金額(万円)') +
    ggtitle('日本棋院賞金ランキング 2013') +
    scale_y_continuous(labels=comma) +
    geom_text(aes(y=shokin, label=sei), hjust=-0.3) # ...(6)
PR

コメント

プロフィール

HN:
KM
性別:
非公開

カレンダー

05 2025/06 07
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