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可视化自定义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)