Google
WWWを検索
サイト内を検索

1 二次元の棒グラフ

ベクトルを棒グラフにしてみましょう。ラベルはnames.argでも指定できますが、name属性をつけておくと自動的に使います。

v <- c(20, 40, 80)
names(v) <- c("A", "B", "C")
(barplot(v))

     [,1]
[1,]  0.7
[2,]  1.9
[3,]  3.1

戻り値は棒の中央の位置で、低水準描画関数で利用できます。

1.1 装飾

引数spaceで棒と棒のスペースを指定できます。単位は棒の横幅サイズです。色やラベルはplotと同様です。

crp <- colorRampPalette(c("lightpink", "deeppink"))
barplot(v, space = 0.5, border = "darkred", col = crp(length(v)), density = 50, angle = 30)

densityangleを指定すると見栄えがよくなることが多いです。

1.2 縦並び

barplot(v, horiz = TRUE)

1.3 モデル式

データフレームを引数にとる場合、モデル式を使うこともできます。

barplot(GNP ~ Year, data = longley)

1.4 集計してプロット

データフレームの集計はしてくれないのでxtabstableで行列をつくる必要がります。

2 多次元の棒グラフ

棒グラフの三次元プロットは視認性が悪いので、積み重ねるか、横並びにしましょう。複数のグラフを並べるのも手段です。

2.1 積み重ね

標準では積み重ねになります。

m <- matrix(c(10, 10, 30, 10, 30, 50), 2, 3)
dimnames(m) <- list(Fruit = c("Apple", "Pineapple"), Box = c("A", "B", "C"))
barplot(m, ylim = c(0, 100), legend.text = TRUE, args.legend = list(x = "top", horiz = TRUE))

多次元なので行列を使いますが、dimnames属性でカテゴリ名を指定しているのに注意してください。また、引数coldensityangleは縦軸の項目数までの色しか参照しません。

legend.text = TRUEで凡例を表示します。内部でlegend関数を呼んでいるわけですが、args.legendでそのパラメーターを指定できます。

2.1.1 比率にする

proportions関数を使えばデータを比率に変換できます。

par(mar = c(4, 4, 5, 1))
barplot(proportions(m, 2), ylim = c(0, 1), legend.text = TRUE, args.legend = list(x = 2, y = 1.25, xpd = TRUE, horiz = TRUE, xjust = 0.5))

凡例を描画領域の外に出しています。

2.1.2 比率と数量の同時表示

mosaicplotの特殊形のspineplotを使うと比率と数量の同時表示が可能です。縦軸の左のラベルが凡例になるので、凡例が手軽に入る利点もあります。

spineplot(t(m))

棒と棒の間はspaceではなくoffで、数量単位で指定します。戻り値は集計データになります。

spineplotは因子型で与えられる未集計のデータもプロットできます。spineplotで行列にまとめられた集計のデータを使う場合は、table関数などでdimnames属性が指定された行列を渡すことが推奨されます。

spineplotは、カテゴリカルデータと数量データの両方を説明変数(横軸)に持てます。カテゴリカルデータの場合はスパインプロット、数量データの場合はスパイログラムと呼び名が変わります。説明変数が数量データの場合はbreaksで、histと同様に集計方法を指定できます。

2.2 横並び

besideをつけると横並びにできます。

barplot(m, ylim = c(0, 100), legend.text = TRUE, args.legend = list(x = "top", horiz = TRUE), beside = TRUE)

2.3 モデル式

モデル式を使う場合は、cbindで従属変数を多次元にします。

barplot(cbind(Employed, Unemployed) ~ Year, data = longley)