2011-10-25 13 views
4

が、私はこのようになり、データ・セットを持っている:プロットレベルがシリーズとして

id  factor H1 H2 H3 H4 H5 H6 
434543 lev3 0.8 0.7 0.7 0.5 0.6 0.8 
434544 lev2 0.5 0.7 0.9 0.7 0.7 0.1 
434545 lev3 0.7 0.7 0.8 0.5 0.7 0.7 
434546 lev2 0.4 0.6 0.5 0.8 0.7 0.2 
434547 lev3 0.6 0.7 0.8 0.8 0.8 0.7 
434548 lev2 0.7 0.7 0.6 0.7 0.8 0.4 
434549 lev2 0.8 0.8 0.8 0.7 0.6 0.5 
434550 lev1 0.3 0.3 0.4 0.3 0.4 0.5 
434551 lev1 0.0 0.3 0.4 0.3 0.2 0.4 
434552 lev3 0.6 0.8 0.8 0.8 0.6 0.7 
434553 lev2 0.6 0.8 0.5 0.2 0.5 0.8 

私は、各時点(H1 ... H6)のレベルの平均とSDをプロットしたいのですが、バープロットではなく、手段を通る連続線を引く。これを行う最善の方法は何でしょうか?

+0

非常に興味深い質問。最初のステップ、つまりループを使用せずに、各レベルおよび各時点H1〜6の平均/ sdを生成することは、かなり難しいでしょう!たぶんtapply/sapply/mapplyの2つのネストされた呼び出し?しかし、私はどのように把握することはできません。プロット部分については、パッケージplotrixの 'plotCI'を見てください。あなたが望むプロットのタイプとまったく同じです。 CIウィスカー(SDを表す)を使ってラインプロットを行うことができます。 – TMS

答えて

5

優れたggplot2パッケージを使用する方法の1つです。

require(ggplot2) 
require(reshape) 

# Load data 
data = read.table('data.txt', header=T) 

# Format data 
data = melt(data, id.vars=c('id', 'factor'), variable_name='time') 
data$time = as.numeric(gsub('H(.+)', '\\1', data$time)) 

# Function to summarize y at each x 
getband <- function(y.in){ 
    ymax = mean(y.in) + sd(y.in) 
    ymin = mean(y.in) - sd(y.in) 
    data.frame(ymax, ymin) 
} 

# Plot 
dev.new(width=5, height=4) 
qplot(time, value, group=factor, geom='point', color=factor, fill=factor, data=data) + 
    stat_summary(color=0, fun.data=getband, geom='ribbon', alpha=0.2) + 
    stat_summary(fun.y=mean, geom='line') 

enter image description here

+0

それは本当にいいよね!かなり正確に私が探していたもの。私はこれを私の実際のデータで試してみます。 – fletch

+0

@fletch素晴らしい!オーバープロットを減らしたい場合は、['position_jitter'](http://had.co.nz/ggplot2/position_jitter.html)オプションもチェックすることができます。 –

+0

*エラー: "melt"関数が見つかりませんでした* - スクリプトの先頭に 'require(reshape)'を追加しました。 – TMS

関連する問題