使用for循环字符绘制具有特定颜色的多行

时间:2017-10-07 16:03:03

标签: r for-loop plot char

我想在一张图上绘制13条线。每行代表我数据的一个子集,按照“'”栏中的字符进行分组。我的工作原理,但我想使用for循环使其更有效。 Here's what the output looks like

要使用的简化数据框:

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))
}

enter image description here

问题是,当i是一个角色时,我不知道如何在每次迭代时更改颜色。搜索此问题会产生i为数字的解决方案,或者用于创建所有不同颜色的行,这两者都不是我的目标。

这是我第一次提出自己的问题,而不是在SO的其他地方找到答案,所以如果您还需要其他信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

在这种情况下,对于循环中的每次迭代,都需要向量的索引和变量本身。获取所需绘图的一种简单方法是迭代索引(下面示例中为ii),并在每次迭代时获取向量元素(i,如前所述)。

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 (ii in seq_along(basinlist)) {
  i <- basinlist[ii]
  lines(sal[basin==i] ~ date[basin==i], data = env,
        col = c(4,4,2)[ii],
        lty = c(1,1,2)[ii])
}

enter image description here