r - 如何在 R ggplot2 中获取与填充美学不同的图例标签
问题描述
在ggplot2
中,如何让填充美学的图例标签与实际用作填充美学的变量不同?我想从下图中看到的是反映name
变量的图例标签。我知道我可以将其name
本身用作填充美学;但是,在下面的示例中,使用列作为向量名称来设置颜色向量storm_cols
(用于ggplot2::scale_fill_manual
)id
比键入每个更方便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)
解决方案
您无需明确输入颜色矢量的名称。相反,您可以以编程方式创建它,从而更轻松地创建所需的颜色分配并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)
推荐阅读
- windows - CMake 错误:无法创建命名生成器 Visual Studio 16 2019
- arrays - 使用 LazyVGrid 时,DetailView 仅调用数组中的第一项
- swift - 选择器在 ios 15 中重叠,防止其中一些被滚动
- npm - 当 VS Code 打开时,终端进程被代码 ELIFECYCLE errno: 137 杀死。退出 VS Code 可以解决问题吗?
- c++ - 理解递归调用直到缓冲区耗尽
- python - 在保持 \r\n 不变的同时替换 \n
- python-3.x - 无法在子进程python中使用多个命令
- amazon-redshift - 了解 Amazon Redshift 计划查询失败的原因
- python - 使用范围时想要打印出一个列表
- wix - 使用 XmlFile 创作的安装时更改是否在卸载期间被反转?