No.13409 複数のヒストグラムを一度に作成する方法  【魚屋】 2010/09/14(Tue) 23:03

いつも拝見させていただいています。

複数回にわたってとったデータをグラフ化しているのですが,かなり手間がかかってしまってい,苦戦しています。
対象としているデータは,"サイズ"のデータなのですが,そのデータをまとめたものを,一度,Rグラフ化し(histgram or boxplot),それを各月や性別などに分けて複数のグラフを作り帯と思っているのですがmそのような方法はありますかでしょうか?

もし,ご存知でしたらご教授いただければ幸いです。よろしくお願いいたします。

No.13413 Re: 複数のヒストグラムを一度に作成する方法  【青木繁伸】 2010/09/15(Wed) 09:55

手間がかかるとはどういうふうなんでしょうか?
グラフを描く一連の操作をまとめて,関数にしておき,使用 するデータを引数で渡してやれば良いと思います。月別や性別に分けるには,split 関数を使えばよいでしょう。たとえば,データフレームの項目に「月」というのがあるとすれば,x <- split(データフレーム,データフレーム$月) のようにすれば,xに月別のデータフレームのリストができますから,それを先ほどのようにして作った描画関数に渡してやればよいのではないですか。
例として,iris データの4変数について,種別のヒストグラムを描くには以下のようにすればよいのです。一瞬にして12枚のヒストグラムが描けます。
draw.hist <- function(d)
{
vname <- colnames(d)
for (i in 1:4) {
pdf(sprintf("%s-%s.pdf", vname[i], d[1, 5]), width=500/72, height=375/72)
hist(d[, i], right=FALSE, xlab=vname[i], main=d[1, 5])
# そのほか,色々な装飾
dev.off()
}
}
junk <- sapply(split(iris, iris[,5]), draw.hist)

No.13419 Re: 複数のヒストグラムを一度に作成する方法  【魚屋】 2010/09/15(Wed) 11:14

青木先生

コメントをいただきありがとうございます.

>例として,iris データの4変数について,種別のヒストグラムを描くには以下のようにす
>ればよいのです。一瞬にして12枚のヒストグラムが描けます。

irisのデータを使って試してみたのですが,コマンドは読み込んだものの,描画されませんでした。
何か他に必要なコマンドがあるのでしょうか?
ご教授いただければ幸いです。
よろしくお願いいたします。

No.13420 Re: 複数のヒストグラムを一度に作成する方法  【青木繁伸】 2010/09/15(Wed) 11:37

作業ディレクトリに,12個のpdfファイルができていると思いますけど?

No.13421 Re: 複数のヒストグラムを一度に作成する方法  【魚屋】 2010/09/15(Wed) 11:41

できていました。失礼しました。
ちなみにですが,pngで作成したい場合には,"pdf"の部分を"png"に変更すればよろしかったのでしょうか?

No.13424 Re: 複数のヒストグラムを一度に作成する方法  【青木繁伸】 2010/09/15(Wed) 11:57

> "pdf"の部分を"png"に変更すればよろしかったのでしょうか?

それだけではありません。? png でオンラインヘルプを見てください。

No.13427 Re: 複数のヒストグラムを一度に作成する方法  【魚屋】 2010/09/15(Wed) 12:06

ありがとうございます。
参照してみます。

No.13429 Re: 複数のヒストグラムを一度に作成する方法  【魚屋】 2010/09/15(Wed) 12:11

度々すみません...

>pdf(sprintf("%s-%s.pdf", vname[i], d[1, 5]), width=500/72, height=375/72)
の,以下の3点を変更すればよろしかったでしょうか?

"%s-%s.pdf"→"Rplot%03d.png",

width=500/72→width = 480

height=375/72→height = 480

初歩的なご質問で申し訳ありませんが,ご教授いただければ幸いです.

No.13431 Re: 複数のヒストグラムを一度に作成する方法  【青木繁伸】 2010/09/15(Wed) 12:12

自分の思ったとおりの結果になればそれでよいのです。

No.13435 Re: 複数のヒストグラムを一度に作成する方法  【魚屋】 2010/09/15(Wed) 13:57

すみません,色々と試してみたのですが,やはり,画像の保存の方法がよく分かりません...
windows userの人は簡単にできるようなのですが,Mac user向けの保存方法が載っていないので苦戦しております...

初歩的なことで申し訳ありませんが,ご助言いただければ幸いです。
よろしくお願いいたします。

No.13436 Re: 複数のヒストグラムを一度に作成する方法  【青木繁伸】 2010/09/15(Wed) 14:14

どこがどのようにうまくいかないのですか?

png ファイルを作るなら以下のようにするだけです。
draw.hist <- function(d)
{
vname <- colnames(d)
for (i in 1:4) {
# 以下の一行だけ変更
png(sprintf("%s-%s.png", vname[i], d[1, 5]), width=500, height=375)
hist(d[, i], right=FALSE, xlab=vname[i], main=d[1, 5])
# そのほか,色々な装飾
dev.off()
}
}
sapply(split(iris, iris[,5]), draw.hist)
ファイル名をどのように決めるかは,あなたの思うように。"Rplot%03d.png" を使いたいということなら,png と dev.off はfor の外に出さないと。。。
draw.hist <- function(d)
{
vname <- colnames(d)
# %03d の % をエスケープする必要あり
png(sprintf("%s%%03d.png", d[1, 5]), width=500, height=375)
for (i in 1:4) {
hist(d[, i], right=FALSE, xlab=vname[i], main=d[1, 5])
# そのほか,色々な装飾
}
dev.off()
}
sapply(split(iris, iris[,5]), draw.hist)
Windows だの Mac だのという問題ではないですね。

No.13438 Re: 複数のヒストグラムを一度に作成する方法  【魚屋】 2010/09/15(Wed) 15:27

ご教授いただき,ありがとうございます。
理解できていない部分が多々あり,ご迷惑をおかけしました。

教えていただいたコマンドでpngファイルができました。
ありがとうございました。

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