R - ggplot2 Legend没有出现在折线图上[重复]

Posted

技术标签:

【中文标题】R - ggplot2 Legend没有出现在折线图上[重复]【英文标题】:R - ggplot2 Legend not appearing for line graph [duplicate] 【发布时间】: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出于某种原因盒子)

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

【问题讨论】:

【参考方案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. 嗯,好的。再次感谢您的帮助!

以上是关于R - ggplot2 Legend没有出现在折线图上[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化:ggplot2可视化分组箱图,将可视化图像的图例(legend)放置在图像底部居中其中图例信息水平平铺​ (position legend bottom center)

R语言可视化包ggplot2改变图例(legend)标签实战

R可视化包ggplot2改变图例(Legend)的位置实战

R语言ggplot2可视化自定义ggplot2可视化图像图例(legend)的背景色(change background colour of legend)

R语言ggplot2可视化删除图例(legend)周围的灰色矩形(remove the gray rectangle around the legend)

R语言ggplot2可视化:ggplot2可视化分组箱图,将可视化图像的图例(legend)放置在图像底部左边左对齐其中图例信息水平平铺​ (position legend bottom left)