1
我想在單個圖上繪製13條線。每行代表我的數據的一個子集,按「盆地」列中的字符分組。我有工作,但我想使用for循環更高效。 Here's what the output looks like。使用for-loop字符來繪製幾行具有特定顏色的線
簡化數據幀一起工作:
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
是一個數字,或者用於創建所有不同顏色的線條,這兩者都不是我的目標。
這是我第一次問自己的問題,而不是找到其他地方張貼的答案,所以讓我知道你是否需要其他東西。
需要兩個變量:一個用於'basin'和一個用於彩色指數:'用於(在seq_along(basinlist)ⅱ){I < - basinlist [II];線(sal [basin == i]〜date [basin == i],data = env,col = c(4,4,2)[ii],lty = c(1,1,2)[ii]) }' – rawr
那是票! 'seq_along'是我所需要的。爲了確保我明白了,它會創建一個長度爲'basinlist'(1:13)的序列,這意味着我可以使用ii作爲數字,而我可以用作盆地名稱? –
你明白了。大多數人傾向於使用'1:length(x)'而不是'seq(x)'或更安全地用於循環'seq_along(x)',但是如果'x < - character(0)',則會得到非常不同的結果從'1:length(x)'和'seq_along(x)' – rawr