首页 > 解决方案 > 使用 scale_color_manual 在 ggplot2 的图例中错误地标记来自多个几何的数据

问题描述

我想在同一个 ggplot 中显示几组曲线。该部分工作正常,但是当我将曲线与情节图例中的内容进行比较时,顺序似乎发生了变化(因此红色和绿色注释与绿色和红色曲线匹配)。

suppressPackageStartupMessages(library(tidyverse))

ggplot() + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 8)), aes(area, color='1')) + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 4)), aes(area, color='4')) + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 2)), aes(area, color='16')) + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 1)), aes(area, color='64')) + 
  coord_cartesian(xlim=c(-10, 10)) + 
  scale_colour_manual(name = 'Number of samples', 
                      values =c('1'='black', '4'='red', '16'='green', '64'='blue'), 
                      labels = c('1', '4', '16', '64'))

reprex 包(v0.2.0)于 2018 年 10 月 16 日创建。

标签: rggplot2scale-color-manual

解决方案


似乎标签是按字典顺序排序的。(“1”、“16”、“4”、“64”)。考虑到这一点,标签可以更改为 ('01', '04', '16', '64')。这有点麻烦,但会生成我想要的情节。

suppressPackageStartupMessages(library(tidyverse))

ggplot() + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 8)), aes(area, color='01')) + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 4)), aes(area, color='04')) + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 2)), aes(area, color='16')) + 
  stat_ecdf(data = data.frame(area = rnorm(5000, sd = 1)), aes(area, color='64')) + 
  coord_cartesian(xlim=c(-10, 10)) + 
  scale_colour_manual(name = 'Number of samples', 
                      values =c('01'='black', '04'='red', '16'='green', '64'='blue'), 
                      labels = c('01', '04', '16', '64'))

reprex 包(v0.2.0)于 2018 年 10 月 16 日创建。


推荐阅读