No.13981 相対度数について  【初心者】 2010/12/16(Thu) 14:31

Rを用いて生物の体長組成をヒストグラムにしたいと考えております。
相対度数まではマニュアルで作れるですが,百を乗じて百分率にするには,下記の式をどのように修正するといいのでしょうか。
hist(a[2:289,2],breaks=seq(20,80,by=1),xlim=c(20,80),ylim=c(0,0.3),xlab="Fork Length (cm)",ylab="Frequency (%)",col=4,main="Apr",probability=TRUE)

No.13982 相対度数について(追加)  【初心者】 2010/12/16(Thu) 15:00

作成した図です。


No.13983 Re: 相対度数について  【青木繁伸】 2010/12/16(Thu) 16:17

x にデータがあるとして,以下のようにする
a <- hist(x, breaks=seq(20, 80, by=1), xlim=c(20, 80), 
ylim=c(0, 0.04), # 図中の数値ではなく以下の at の範囲
xlab="Fork Length (cm)", ylab="Frequency (%)", col=4,
main="Apr", probability=TRUE,
yaxt="n") # ここではまだ軸を描くなという指定
at <- pretty(c(0, a$intensities)) # 目盛りを描く位置
labels <- at*100*diff(a$breaks)[1] # 描くべき目盛り数値
axis(2, at=at, labels=labels) # 縦軸を描く

No.13984 相対度数について  【初心者】 2010/12/16(Thu) 16:20

青木先生

ありがとうございます。
さっそく参考にさせていただきます。

No.13985 相対度数について(追加)  【初心者】 2010/12/16(Thu) 17:11

青木先生ありがとうございます。

このように複数のグラフを続ける場合,すべてY軸の25%の範囲 に収まればいいのですが,中にはY軸の最大値がY軸の範囲を超えてしまうことがあります。エクセルならすぐに調整できるのですが,Rの場合,軸を統一する には(たとえばすべてY軸の最大値を40%するには?)どのようにすればいいのでしょうか。

教えて頂けると幸いです。


No.13986 Re: 相対度数について  【青木繁伸】 2010/12/16(Thu) 17:18

ylim で共通の指定をすればよいだけです。

No.13987 Re: 相対度数について  【初心者】 2010/12/16(Thu) 18:02

ありがとうございます。

No.13990 Re: 相対度数について  【初心者】 2010/12/17(Fri) 10:22

at <- pretty(c(0, a$intensities)) # 目盛りを描く位置
atはこの範囲になっています。
[1] 0.00 0.05 0.10 0.15 0.20 0.25
この部分の意味がよくわかりません。
もともとの図中の範囲ではなく0〜0.25までの範囲を指定したということでしょうか。

また,ylimで指定するにはどの段階で指定するといいのでしょうか。

No.13991 Re: 相対度数について  【青木繁伸】 2010/12/17(Fri) 11:32

以下のようにすればよいでしょう。複数のグラフを描くということのようなので,関数の形にまとめ,引数は ... を使って記述することにします。
ylim に指定するのは,at に付値されている数値に基づくものです。関連する複数の図を描く関数呼び出しで,同じ値(下記の例では ylim=c(0, 1) を指定します。
なお,breaks, xlim もすべての図で同じ値を指定します。特に,breaks が違うと縦軸の数値は絶対にそろいません。
図はクリックすると,拡大表示されます。
func <- function(x, ...)
{
a <- hist(x, probability=TRUE, yaxt="n", ...) # ここではまだ軸を描くなという指定
at <- pretty(c(0, a$intensities)) # 目盛りを描く位置
labels <- at*100*diff(a$breaks)[1] # 描くべき目盛り数値
axis(2, at=at, labels=labels) # 縦軸を描く
}
layout(matrix(1:3, 1))
for (i in levels(iris[,5])) {
func(iris[iris[,5] == i,1], breaks=seq(4, 8, by=0.5), xlim=c(4, 8), ylim=c(0, 1),
ylab="Frequency (%)", main=paste("iris$Sepal.Length(", i, ")", sep=""), col="lightblue")
}
layout(1)


No.13992 Re: 相対度数について  【初心者】 2010/12/17(Fri) 13:08

青木先生

ありがとうございます。
新たに知識が増えました。
breaksの数値を統一していませんでした。

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