【问题标题】:How can I plot line graphs running loops over columns?如何绘制在列上运行循环的折线图?
【发布时间】:2020-05-12 20:01:35
【问题描述】:

由于我是新手,所以我正在发展自己的 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......)
}

请指导我完成整个过程。

【问题讨论】:

  • 如果其中一个或两个答案都回答了您的问题,请将其标记为正确

标签: r ggplot2


【解决方案1】:

你是这个意思吗?

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

ggplot2 更喜欢“长”格式的数据。要明白我的意思,请查看结果 post-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 顺序,或者哪个层“在顶部”。)

【讨论】:

  • 您好,感谢您的评论,但我正在寻找与列数相对应的多个图。如果我不能出去,我会试一试。
【解决方案2】:

如果您更喜欢学习 for 循环并且希望每列绘制一个图,您可以这样做(尽管这很残酷)...

library(ggplot2)
mydf <- data.frame(Year = c(2002:2005), C1 = c(1, 5, 4, 5), C2 = c(8, 2, 7, 1), C3 = c(6, 6, 8, 1), C4 = c(3, 5, 4, 2))
mydf  
#>   Year C1 C2 C3 C4
#> 1 2002  1  8  6  3
#> 2 2003  5  2  6  5
#> 3 2004  4  7  8  4
#> 4 2005  5  1  1  2


myaxis <- colnames(mydf[1])
mynames <- colnames(mydf[-1])
myaxis
#> [1] "Year"
mynames
#> [1] "C1" "C2" "C3" "C4"

for (i in seq_along(mynames)) {
  print(ggplot(mydf, aes_string(x = myaxis, y = mynames[[i]], group = 1)) + geom_line() + geom_point())
}

reprex package (v0.3.0) 于 2020-05-12 创建

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2021-03-10
    • 2021-06-30
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多