【问题标题】:Plot with multiple lines in different colors using ggplot2使用 ggplot2 绘制不同颜色的多条线
【发布时间】:2026-01-16 11:35:01
【问题描述】:

我有一个数据框,其中包含一个年份列 (1980-2009) 和 16 个列,其中包含来自 16 个不同模型的气象数据。所以每个值代表一年和一个模型的年值。 这里有一些代码可以很容易地重现:

set.seed(20)
df <- as.data.frame(matrix(rnorm(120), 30, 16))
df[,17] <- 1980:2009
df <- df[,c(17,1:16)]
colnames(df) <- c("Year", "Model 1", "Model 2", "Model 3", "Model 4", "Model 5", "Model 6", "Model 7", "Model 8", 
                  "Model 9","Model 10", "Model 11", "Model 12", "Model 13", "Model 14", "Model 15", "Model 16")

现在我想用ggplot2 绘制它。目标是在一个绘图中包含多条不同颜色的线,每条线代表一个不同的模型。理想情况下,您应该能够为每条线选择颜色。

我已经检查过假设的类似问题,例如这两个: Question1 Question2

但他们都没有真正适用于我的示例。

使用相同数据的 Excel 中的结果应该有点像这样:

有人有提示吗?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    ggplot 需要长而不是宽的数据。你可以使用 tidyr 的pivot_longer,但还有其他功能,比如 reshape。

    library(tidyverse)
    set.seed(20)
    df <- as.data.frame(matrix(rnorm(30*16), 30, 16))
    df[,17] <- 1980:2009
    df <- df[,c(17,1:16)]
    colnames(df) <- c("Year", "Model 1", "Model 2", "Model 3", "Model 4", "Model 5", "Model 6", "Model 7", "Model 8", 
                      "Model 9","Model 10", "Model 11", "Model 12", "Model 13", "Model 14", "Model 15", "Model 16")
    df %>% 
      as_tibble() %>% 
      pivot_longer(-1) %>% 
      ggplot(aes(Year, value, color = name)) + 
       geom_point() +
       geom_line() 
    

    对于更多插值线,您可以尝试ggalt 的 x-spline 方法

    df %>% 
      as_tibble() %>% 
      pivot_longer(-1) %>% 
      filter(grepl("12|13|14", name)) %>% 
      ggplot(aes(Year, value, color = name)) + 
      geom_point() +
      ggalt::geom_xspline()
    

    【讨论】:

    • 非常感谢@Roman!这就是我一直在寻找的。剩下一个问题:有没有一种方法可以为单行选择颜色。比如让Model 1的颜色变成黑色?
    • 太棒了,成功了!最后一件事:上面的图例“名称”显示为您的图像。有办法让它消失吗?
    • 当然可以。检查 scale_colour_manual("", values = c("red", "blue", "green","black", ...))