No.11350 棒グラフのバーの重ね描き  【波音】 2009/11/29(Sun) 21:41

早速ですが青木繁伸「統計数字を読み解くセンス」化学同人(2009)を読ませていただきました。データの尺度水準と仮説検定の考え方の節が分かりやすく書かれていたので,友達にも教えてあげようと思います(ただ,縦書きなので数字が読みにくいですね ^^; )。

それはそうと,p142にある図7-4の棒グラフはRで描いたものでしょうか。barplot()で描いた後に低水準関数(の何かを使って)で重ね書きをしたのでしょうか・・・

バーを重ねて描くのはあまりスタンダードな方法ではないと思うのですが,気になって調べてみたのですが分からなかったので(^_^;)

No.11353 Re: 棒グラフのバーの重ね描き  【青木繁伸】 2009/11/30(Mon) 11:25

もうお読みいただいたとは,恐縮です。あまり専門性はないので,「金返せ!」といわれないか不安です。

図は,汎用性についてはあまり考慮せず,以下のようなプログラムで描いたものです。
draw <- function(x, ex, lx, ly1, ly2, w, h, labels=1:length(x), ...)
{
legend <- function(x, y, dx=0.1, dy=10, label, ...)
{
rect(x, y, x+dx, y+dy, ...)
text(x+dx, y+dy/2, label, pos=4)
}
old <- par(mgp=c(1.5, 0.5, 0), mar=c(2.7, 2.7, 0.8, 0.1), pch=19, cex=1.4, lwd=2)
ex <- sum(x)*ex
n <- length(x)
mx <- max(x)
plot(c(0.8, n+1), c(0, mx), type="n", yaxs="i", xaxt="n", bty="n", ...)
axis(1, at=1:n+0.5, labels=labels, pos=0)
for (i in 1:n) {
rect(i+0.1, 0, i+0.7, ex[i], lwd=1, col="grey90")
rect(i+0.3, 0, i+0.9, x[i], lwd=2, density=20)
}
legend(lx, ly1, w, h, "実測値", lwd=2, density=20)
legend(lx, ly2, w, h, "期待値", col="grey90")
par(old)
}
x <- c(21, 54, 95, 46, 28)
labels <- LETTERS[1:5]
ex <- c(1, 4, 5, 3, 2)
ex <- ex/sum(ex)
draw(x, ex, labels=labels, xlab="group", ylab="Frequency", lx=4.3, ly1=80, ly2=70, w=0.5, h=8)

No.11360 Re: 棒グラフのバーの重ね描き  【波音】 2009/11/30(Mon) 20:24

なるほど,barplot()を使うのではなくて,plot()で作図領域を確保してからrect()でバーを描いていたのですね。教えてもらえば一目瞭然ですが,こういう工夫をして描くこともできるのですね,勉強になりました。

> もうお読みいただいたとは,恐縮です。

Amazonで予約していたら29日に届いたので特に気にもしていなかったのですが,裏表紙を見たら発売日は一応30日だったのですね(^_^;)

● 「統計学関連なんでもあり」の過去ログ--- 043 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る