私は1つのグラフに13行をプロットしたいと思います。各行は私のデータのサブセットを表し、カラム 'basin'の文字でグループ化されています。私はうまく機能していますが、forループを使って効率を上げたいと思います。 Here's what the output looks like。文字のforループを使用して、特定の色で複数の線をプロットする
で動作するように単純化されたデータフレーム:
env <- data.frame(basin = c('BLK','DUC','WHP','BLK','DUC','WHP','BLK','DUC','WHP'),
sal = c(5,6,3,2,4,5,6,8,4),
date = c(2013,2013,2013,2015,2015,2015,2017,2017,2017))
と動作しませんでした何の簡易版(それが実行されますが、すべてのラインが青と固体になる):
basinlist <- c('BLK','DUC','WHP')
plot(sal~date, data = env, type = 'n', ylim = c(0,10), ylab = 'Salinity')
for(i in basinlist){
lines(sal[basin==i] ~ date[basin==i], data = env,
col = c(4,4,2),
lty = c(1,1,2))
}
i
が文字の場合、各繰り返しで色を変更する方法がわかりません。この問題を検索すると、i
が数字である場合、またはすべての色が異なる線を作成する場合の解決策が得られますが、どちらも私の目標ではありません。
これは私が自分の質問をしたのは初めてですが、回答が他の場所に掲載されていることを発見するのではなく、必要な場合はお知らせください。
次の2つの変数を必要とする: 'basin'用とカラーインデックスのための1つ:'(seq_along(basinlist)におけるII)のために{iが< - basinlistを[II]。データ= env、col = c(4,4,2)[ii]、lty = c(1,1,2)[ii]) } ' – rawr
それはチケットだった! 'seq_along'は私が必要としたものです。私が理解していることを確かめるために、長さ 'basinlist'(1:13)のシーケンスを作っています。これは、iiを底辺の名前として使うことができますか? –
あなたはそれを持っています。ほとんどの人は 'seq(x)'の代わりに '1:length(x)'を使う傾向がありますし、 'seq_along(x)'ループに対しては安全ですが 'x < - character(0)'なら、 '1:length(x)'と 'seq_along(x)' – rawr