2017-04-12 5 views
1

私は50回、1年間の反復の200回の複製を持つ母集団シミュレーションデータを持っています。私は、同じプロット上で200個の軌跡をすべて線としてプロットしたい(y =人口サイズ、x =年)。次のコード...forループを使用して異なる最大X値を持つ複数の軌跡線をプロット

baseline<-read.csv("C:\\Users\\Chelsea Mitchell\\Desktop\\Poster materials\\chinook baseline raw.csv", header=T) 

    plot(baseline$time.step..year[1:50], 
    baseline$pop.size[1:50], type="l", main="baseline model" 
    , xlab= "Year", ylab= "Population size", ylim= c(0,2e+08)) 

    for (i in 2:(length(baseline$time.step..year)/50)) 
    {lines(baseline$time.step..year[(1+(i-1)*50):(i*50)], 
    baseline$pop.size[(1+(i-1)*50):(i*50)])} 

image of appropriate plot without extinction

このニーズを満たしている。しかし、いくつかのケースでは、人口は絶滅行き、軌道が、私は軌道ラインを停止するループのために言うことができますどのように年間50前に停止次のシミュレーションデータが1年目に再び始まる前に?ここで

image of problem plot with extinction

同じ問題を持つデータとコードの構築、簡易版です。最大年数は10であるため、forループは1:10の「年」シーケンスの軌跡線をプロットします。 pop.sizeが0になると、複製が停止するので、軌跡プロットも停止するはずです。

rep <- c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3) 
    year <- c(1,2,3,4,1,2,3,4,5,6,1,2,3,4,5,6,7,8,9,10) 
    pop.size <- c(526,120,165,0,634,637,452,130,189,0,599,436,320,245,336,225,134,37,87,0) 
    extinct.pop <- data.frame(rep,year,pop.size) 

    plot(extinct.pop$year[1:10], extinct.pop$pop.size[1:10], 
    type="l", xlim= c(0,10)) 

    for (i in 2:(length(extinct.pop$year)/10)){ 
    lines(extinct.pop$year[(1+(i-1)*10):(i*10)], 
    extinct.pop$pop.size[(1+(i-1)*10):(i*10)])}   

ありがとうございました!

+0

再現可能な例を作成できるようにデータのセクションを追加できますか?例えば、 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

答えて

1

コードは1行だけプロットされています。 代わりに、ggplot2を使用しているため、ループは必要ありません。このようなものが欲しいですか?

library(ggplot2) 
ggplot(data=extinct.pop, aes(x=year, y=pop.size, group = rep)) + geom_line() 
+0

ありがとう、これは私の実際のデータセットでうまくいきました! –

+0

ggplot()の数値を軸のラベルに変更して背景の陰影を削除することはできますか? –

+0

xlab、ylab、theme_bw()を使用します。例:ggplot(data = extinct.pop、aes(x = year、y = pop.size、group = rep))+ geom_line()+ xlab( "YEAR")+ ylab( "POP.size")+ theme_bw() –

関連する問題