R-ggplot2图例未出现在折线图中

时间:2019-02-05 21:11:51

标签: r ggplot2 plot

我知道之前曾有人问过这个问题,我已经看过许多链接,但似乎没有一个对我的情况有所帮助。 我正在为4种不同颜色的线绘制线图。但我无法显示图例。

我已经读到我需要将color属性放在图形的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")

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

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

1 个答案:

答案 0 :(得分:2)

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

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))

现在我们可以绘图。使用这种形式的数据,无需为每个变量使用单独的几何,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"))

enter image description here

关键是要以正确的格式存储数据,并了解如何使aes将变量映射到统计图属性。