如何使用ggplot添加彩色图例?

时间:2018-10-31 09:34:15

标签: r ggplot2 legend

我有这个数据框,我想用ggplot在x轴上绘制 result_df50 $ id 列,在y轴上使用列 result_df50 $ Sens result_df50 $ Spec

我还希望 result_df50 $ Sens result_df50 $ Spec 以不同的颜色显示。图例还应显示列的不同颜色。

> result_df50
   Acc Sens Spec id
1   12   51   15  1
2   24   78   28  2
3   31   86   32  3
4   78   23   90  4
5   49   43   56  5
6   25   82   33  6
7    6   87    8  7
8   60   33   61  8
9   54    4   66  9
10   5   54    9 10
11   1   53    4 11
12   2   59    7 12
13   4   73    3 13
14  48   41   55 14
15  30   72   39 15
16  57   10   67 16
17  80   31   91 17
18  30   65   36 18
19  58   45   61 19
20  12   50   19 20
21  39   47   46 21
22  38   49   45 22
23   3   69    5 23
24  68   24   76 24
25  35   64   42 25

到目前为止,我已经尝试过了,对此我感到满意。

ggplot(data = result_df50) +
  geom_line(data= result_df50, aes(x = result_df50$id, y = result_df50$Spec), colour = "blue") + 
  geom_line(data= result_df50, aes(x = result_df50$id, y = result_df50$Sens), colour = "red") +
  labs(x="Number of iterations")

现在,我只想添加带有每行颜色的图例。我尝试了fill,但R给出了警告,并忽略了此unknown aesthetics: fill .... 我该怎么办?

1 个答案:

答案 0 :(得分:1)

这是因为您的数据集格式错误(宽)。您必须将其转换为长格式才能使其按以下方式工作:

result_df50 <-  read.table(text="Acc Sens Spec id
1   12   51   15  1
           2   24   78   28  2
           3   31   86   32  3
           4   78   23   90  4
           5   49   43   56  5
           6   25   82   33  6
           7    6   87    8  7
           8   60   33   61  8
           9   54    4   66  9
           10   5   54    9 10
           11   1   53    4 11
           12   2   59    7 12
           13   4   73    3 13
           14  48   41   55 14
           15  30   72   39 15
           16  57   10   67 16
           17  80   31   91 17
           18  30   65   36 18
           19  58   45   61 19
           20  12   50   19 20
           21  39   47   46 21
           22  38   49   45 22
           23   3   69    5 23
           24  68   24   76 24
           25  35   64   42 25")

# conversion to long format
library(reshape2)
result_df50 <- melt(result_df50, id.vars=c("Acc", "id"))

head(result_df50)
#   Acc id variable value
# 1  12  1     Sens    51
# 2  24  2     Sens    78
# 3  31  3     Sens    86
# 4  78  4     Sens    23
# 5  49  5     Sens    43
# 6  25  6     Sens    82

# your plot
ggplot(data = result_df50, aes(x = id, y =value , color=variable)) +
  geom_line() + 
  labs(x="Number of iterations")+
  scale_color_manual(values=c("red", "blue")) # in case you want to keep your colors

这是您想要的吗?