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

Posted

技术标签:

【中文标题】如何使用 ggplot 添加彩色图例?【英文标题】:How can I add with ggplot the colored legend? 【发布时间】:2019-04-04 10:28:33 【问题描述】:

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

我还希望 result_df50$Sensresult_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】:

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

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

这是你想要的吗?

【讨论】:

感谢您的评论!我如何(使用您的答案)在 y 轴上绘制两条线,分别是 SensSpec 正是我的示例向您展示的方式。首先,您必须更改数据格式,以便 Spec 和 Sens 成为新列中的两个因子级别/字符。在 ggplot 美学的颜色参数中指定该列后,两条线都会以您想要的方式出现。复制并粘贴我的整个示例(您向下滚动了吗?)并尝试一下。它应该可以工作。 好吧,我没有看到其余的...刚刚试了一下,它的工作原理。谢谢! :) 您的示例数据很长,这使得示例比它必须的要长。您只需要很短的转换和情节部分。 我的真实数据更长...再次感谢!

以上是关于如何使用 ggplot 添加彩色图例?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Chart.js v1 在饼图中添加彩色图例框?

ggplot2:顶部图例键符号大小随图例键标签而变化

如何将图例添加到 ggplot2 中的多行?

将图例中的 ggplot 彩色线条更改为正方形或圆形

如何将 ggplot 注释放在我的图例上?

如何在一个 ggplot2 图中为两个几何图层添加图例?