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

Posted

技术标签:

【中文标题】使用字符的 for 循环绘制具有特定颜色的几行【英文标题】:Use a for-loop of characters to plot several lines with specific colors 【发布时间】:2018-03-19 05:39:24 【问题描述】:

我想在一个图表上绘制 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))

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

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

【问题讨论】:

您需要两个变量:一个用于basin,一个用于颜色索引:for (ii in seq_along(basinlist)) i &lt;- basinlist[ii]; lines(sal[basin==i] ~ date[basin==i], data = env, col = c(4,4,2)[ii], lty = c(1,1,2)[ii]) 那是票! seq_along 是我需要的。为了确保我理解,它生成了一个长度为basinlist (1:13) 的序列,这意味着我可以使用 ii 作为数字,使用 i 作为盆地名称? 你明白了。大多数人倾向于使用1:length(x) 而不是seq(x) 或更安全的循环seq_along(x),但如果x &lt;- character(0),你会得到与1:length(x)seq_along(x) 截然不同的结果 @rawr 你可以发帖作为答案,以便我标记为已解决吗? 【参考方案1】:

在这种情况下,对于循环中的每次迭代,您都需要向量的索引和变量本身。获得所需绘图的一种简单方法是遍历索引(在下面的示例中为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])

【讨论】:

以上是关于使用字符的 for 循环绘制具有特定颜色的几行的主要内容,如果未能解决你的问题,请参考以下文章

vue非常实用的几行代码日期处理字符串处理数组处理颜色操作

如何使用 R 中的 ggplot 绘制具有相同颜色的填充点和置信椭圆?

JavaFX延迟for循环中的颜色变化

绘制大量不同颜色的正方形

如何绘制颜色矢量?我可以尝试不同的方法吗?

对具有相同结构的几个数据集使用lapply并可能进行for循环以提取和计算每个数据帧的值