将图例添加到geom_line()图

时间:2020-05-15 14:00:44

标签: r ggplot2

我想在此代码生成的图中添加图例:

library(ggplot2)

v1 <- c(4.5, 4.5, 4.5, 5)
v2 <- c(3.5, 3, 3, 3.5)
v3 <- c(3, 4.5, 4, 3)
afname <- c(1, 2, 3, 4)

df <- data.frame(v1, v2, v3, afname)

df$afname <- as.factor(df$afname)

ggplot(df, aes(x = afname, group = 1)) +
  geom_line(aes(y = v1), size= 1, color = "blue") +
  geom_line(aes(y = v2), size= 1, color = "red") +
  geom_line(aes(y = v3), size= 1, color = "green") +
  ylim(2, 5) +
  ylab("vraag")

这将如何完成?

2 个答案:

答案 0 :(得分:1)

一种方法是旋转数据,以便您可以使用ggplot的映射:

library(ggplot2)
library(dplyr)
library(tidyr)
df %>%
  pivot_longer(-afname,names_to = "group") %>% 
ggplot(aes(x = as.numeric(afname), y = value, color = group)) +
  geom_line() +
  scale_color_discrete(labels = c("Label 1","Label 2", "Label 3")) + 
  ylim(2, 5) +
  ylab("vraag") + xlab("afname")

enter image description here

答案 1 :(得分:1)

您可以使用以下代码,该代码首先转换tidy数据集中的数据:因为这正是ggplot的期望。因此,我们使用gather中的tidyr

您的数据如下:

df
   v1  v2  v3 afname
1 4.5 3.5 3.0      1
2 4.5 3.0 4.5      2
3 4.5 3.0 4.0      3
4 5.0 3.5 3.0      4

收集后看起来如下:

df2
   afname Group vraag
1       1    v1   4.5
2       2    v1   4.5
3       3    v1   4.5
4       4    v1   5.0
5       1    v2   3.5
6       2    v2   3.0
7       3    v2   3.0
8       4    v2   3.5
9       1    v3   3.0
10      2    v3   4.5
11      3    v3   4.0
12      4    v3   3.0

因此,以下代码将生成带有图例的所需图(由ggplot生成,而无需您对其进行显式编码)

library(ggplot2)
library(tidyr)

df2 <- gather(df, Group, vraag, -afname)
ggplot(df2, aes(x = afname, y= vraag, col = Group, group = Group)) + 
  geom_line() +
  scale_y_continuous(limits = c(2,5))

这将产生以下图:

enter image description here