【问题标题】:R - ggplot2 Legend not appearing for line graph [duplicate]R - ggplot2 Legend没有出现在折线图上[重复]
【发布时间】:2019-06-29 18:50:23
【问题描述】:

我知道以前有人问过这个问题,并且我查看了许多链接,但似乎没有一个对我的情况有所帮助。 我正在为 4 条不同颜色的线绘制折线图。但我无法让图例出现。

我读到我需要将颜色属性放在图表的 aes 部分。那也没有成功。

我有一个四列和 1000 行的数据框。这是一个可重复的小示例,说明我的数据是什么样的,以及我想如何绘制它。

library(ggplot2)

vec1 <- c(0.1, 0.2, 0.25, 0.12, 0.3, 0.7, 0.41)
vec2 <- c(0.5, 0.4, 0.3, 0.55, 0.12, 0.12, 0.6)
vec3 <- c(0.01, 0.02, 0.1, 0.5, 0.14, 0.2, 0.5)
vec4 <- c(0.08, 0.1, 0.54, 0.5, 0.1, 0.12, 0.3)

df <- data.frame(vec1, vec2, vec3, vec4)

df_plot <- ggplot() +
  geom_line(data = df, color = "black", aes(x = c(1:7), y = df[,1], color = 
"black")) +
  geom_line(data = df, color = "blue", aes(x = c(1:7), y = df[,2], color = 
"blue")) +
  geom_line(data = df, color = "green", aes(x = c(1:7), y = df[,3], color = 
"green")) +
  geom_line(data = df, color = "yellow", aes(x = c(1:7), y = df[,4], color 
= "yellow")) +
  xlab("x axis") +
  ylab("y axis") +
  ggtitle("A random plot") +
  theme(legend.title = element_text("Four lines"), legend.position = 
"right")

(另外,是否改变了缩进代码的过程?以前,我可以按 Ctrl + K 缩进整个代码块。但我不能再这样做了。Ctrl + K 将光标放在我的 URL出于某种原因盒子)

我希望它在图表右侧打印图例。

【问题讨论】:

    标签: r ggplot2 plot


    【解决方案1】:

    首先:我在这里看到很多人通过首先创建单个向量来创建数据框。我不知道这种做法起源于哪里,但没有必要:

    df1 <- data.frame(vec1 = c(0.1, 0.2, 0.25, 0.12, 0.3, 0.7, 0.41),
                      vec2 = c(0.5, 0.4, 0.3, 0.55, 0.12, 0.12, 0.6),
                      vec3 = c(0.01, 0.02, 0.1, 0.5, 0.14, 0.2, 0.5),
                      vec4 = c(0.08, 0.1, 0.54, 0.5, 0.1, 0.12, 0.3))
    

    下一步:您的数据采用“宽”形式。 ggplot2 更适合“长”形式:一列用于变量,另一列用于变量值。您可以使用tidyr::gather 来实现。在此过程中,我们可以使用dplyr::mutate 添加 x 变量:

    library(dplyr)
    library(tidyr)
    library(ggplot2)
    
    df1 %>% 
      gather(Var, Val) %>% 
      mutate(x = rep(1:7, 4))
    

    现在我们可以绘图了。使用这种形式的数据,无需为每个变量使用单独的 geom,aes() 会自动处理颜色和图例。您可以使用scale_color_manual 指定自定义颜色。我不知道黄色或绿色是很好的选择,但这里是:

    df1 %>% 
      gather(Var, Val) %>% 
      mutate(x = rep(1:7, 4)) %>% 
      ggplot(aes(x, Val)) + 
        geom_line(aes(color = Var)) + 
        scale_color_manual(values = c("black", "blue", "green", "yellow"))
    

    关键是让您的数据采用正确的格式,并了解如何让aes 将变量映射到图表属性。

    【讨论】:

    • 谢谢。我对您使用的 %>% 表示法不是很熟悉,但我会研究一下。
    • 那叫管道,基本上就是把左边的运算结果传给右边的。有很多关于它的教程例如 this one.
    • 嗯,好的。再次感谢您的帮助!
    猜你喜欢
    • 2021-01-06
    • 2023-03-21
    • 2021-08-06
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多