【问题标题】:How to get legend labels that differ from fill aesthetic in R ggplot2如何在 R ggplot2 中获取与填充美学不同的图例标签
【发布时间】:2019-04-04 20:11:39
【问题描述】:

ggplot2 中,如何使填充美学的图例标签与实际用作填充美学的变量不同?我想从下图中看到的是反映 name 变量的图例标签。我知道我可以将name 本身用作填充美学;但是,在以下示例中,使用 id 列作为矢量名称来设置颜色矢量 storm_cols(用于 ggplot2::scale_fill_manual)比键入每个 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)

【问题讨论】:

  • 我认为您正在寻找 override.aes ... 在 SO 或其他地方搜索,看看您想出了什么?

标签: r ggplot2


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2020-01-25
    • 2021-02-15
    • 2013-07-13
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    相关资源
    最近更新 更多