首页 > 解决方案 > 如何在 R ggplot2 中获取与填充美学不同的图例标签

问题描述

ggplot2中,如何让填充美学的图例标签与实际用作填充美学的变量不同?我想从下图中看到的是反映name变量的图例标签。我知道我可以将其name本身用作填充美学;但是,在下面的示例中,使用列作为向量名称来设置颜色向量storm_cols(用于ggplot2::scale_fill_manualid比键入每个更方便name

library(dplyr)
library(ggplot2)
dat <-
    storms %>% 
    filter(year >= 2015) %>% 
    group_by(name, year) %>% 
    summarize(avg_wind = mean(wind)) %>% 
    ungroup() %>% 
    mutate(id = as.character(row_number())) %>% 
    slice(1:4)
storm_cols <- c("1" = "red", "2" = "blue", "3" = "green", "4" = "yellow")
dat %>% 
    ggplot(aes(id, avg_wind, fill = id)) +
    geom_col() +
    scale_fill_manual(values = storm_cols)

标签: rggplot2

解决方案


您无需明确输入颜色矢量的名称。相反,您可以以编程方式创建它,从而更轻松地创建所需的颜色分配并name直接用作填充美学。例如,在这种情况下,您可以使用包中的set_names函数purrr(或基本 RsetNames函数)。

library(tidyverse)

dat %>% 
  ggplot(aes(id, avg_wind, fill = name)) +
  geom_col() +
  scale_fill_manual(values = c("red","blue","green","yellow") %>% set_names(dat$name))

在此处输入图像描述

labels对于您的原始示例,您可以将带有参数的图例标签更改为scale_fill_manual

dat %>% 
  ggplot(aes(id, avg_wind, fill = id)) +
  geom_col() +
  scale_fill_manual(values = storm_cols,
                    labels = dat$name)

推荐阅读