首页 > 解决方案 > 如何绘制在列上运行循环的折线图?

问题描述

由于我还很新,我正在发展我在 R 上工作的技能。

我有一个包含 n 列和 n 行的数据框。我需要绘制折线图(可能正在使用 ggplot),第一列作为 x 轴(它有年份数据)并为其余列运行循环。我需要 n-1 个用于 n 列的图表。

假设数据框 (df) 有 5 列,其中第 1 列将用于 x 轴,循环应该运行 2 及以后。2:5 列的值将创建线图。每个新列都应形成一个新图表,表示来自受尊敬城市的值。下面提到的数据框,后面是我一直在阅读的代码,类似于数据框。

Year    C1  C2  C3  C4
2002    1   8   6   3
2003    5   2   6   5
2004    4   7   8   4
2005    5   1   1   2

我尝试了一些类似于以下的代码,但没有提取任何结果。

for (i in 2:5) {
 ggplot(df......)
}

请指导我完成整个过程。

标签: rggplot2

解决方案


你是这个意思吗?

library(ggplot2)
# library(tidyr) # pivot_longer
ggplot(tidyr::pivot_longer(dat, -Year), aes(Year, value, color = name)) +
  geom_line()

ggplot2 绘制四行

ggplot2更喜欢“长”格式的数据。要了解我的意思,请查看以下结果pivot_longer

tidyr::pivot_longer(dat, -Year)
# # A tibble: 16 x 3
#     Year name  value
#    <int> <chr> <int>
#  1  2002 C1        1
#  2  2002 C2        8
#  3  2002 C3        6
#  4  2002 C4        3
#  5  2003 C1        5
#  6  2003 C2        2
#  7  2003 C3        6
#  8  2003 C4        5
#  9  2004 C1        4
# 10  2004 C2        7
# 11  2004 C3        8
# 12  2004 C4        4
# 13  2005 C1        5
# 14  2005 C2        1
# 15  2005 C3        1
# 16  2005 C4        2

如果你不想重塑,你必须这样做另一种类似的方式:

gg <- ggplot(dat, aes(x = Year))
for (nm in names(dat)[-1]) {
  gg <- gg + geom_line(aes_string(y = nm, color = factor(nm)))
}
print(gg)

(但我建议从宽到长进行重塑。它可以实现的远不止这些。)

(我承认使用for循环执行此操作的一个优点是您可以手动控制 z 顺序,或者哪个图层“在顶部”。)


推荐阅读