r - 在一个图形中绘制带有标签的多个列

问题描述 投票:3回答:2

我想在一个图中按时间绘制3列数据(x,y,z),标签为3列名(“x”,“y”,“z”)。

data df

我使用以下代码进行绘图,但不知道如何添加标签

p <- ggplot() + 
   geom_line(aes(time, x), df, colour = "red") + 
   geom_line(aes(time, y), df, colour = "blue") + 
   geom_line(aes(time, z), df,colour = I("darkgreen")) + 
   xlab("Time") + ylab("value")

Output

r ggplot2
2个回答
2
投票

这是你想要的吗?

ggplot(data = df) +
  geom_line(aes(time, x, color = "X")) +
  geom_line(aes(time, y, color = "Y")) +
  geom_line(aes(time, z, color = "Z")) +
  xlab("Time") +
  ylab("value") +
  labs(color = "YOUR LEGEND TITLE")

enter image description here

虽然@akrun是对的,但将数据转换为长格式将是这里的方法:

library(reshape2)
df <- melt(df, id.vars = "time")

> df
   time variable value
1     1        x     1
2     2        x     2
3     3        x     3
4     4        x     4
5     1        y     2
6     2        y     4
7     3        y     6
8     4        y     8
9     1        z     1
10    2        z     3
11    3        z     5
12    4        z     7

然后

ggplot(data = df, aes(x = time, y = value, color = variable)) +
  geom_line() +
  xlab("Time") +
  ylab("value") +
  labs(color = "YOUR LEGEND TITLE")

图例标题是可选的btw:

ggplot(data = df, aes(x = time, y = value, color = variable)) +
  geom_line() +
  xlab("Time") +
  ylab("value") +
  labs(color = "")

1
投票

您可以使用scale_colour_manual来显示图例。修改后的代码如下所示:

p <- ggplot(df, aes(x,y,z)) + 
  geom_line(aes(time, x, colour = "x")) + 
 geom_line(aes(time, y, colour = "y")) + 
 geom_line(aes(time, z,colour = "z")) + 
 scale_colour_manual("", 
                      breaks = c("x", "y", "z"),
                      values = c("red", "blue", "green")) +
 xlab("Time") + ylab("value")
© www.soinside.com 2019 - 2024. All rights reserved.