很想弄清楚 R 中的条形图上哪个因子级别已映射到哪个填充颜色?

Posted

技术标签:

【中文标题】很想弄清楚 R 中的条形图上哪个因子级别已映射到哪个填充颜色?【英文标题】:Hot to figure out which factor level has been mapped to which fill color on a barplot in R? 【发布时间】:2022-01-17 12:58:41 【问题描述】:

如果有可能获得因子水平和条形填充颜色之间的映射,我正在徘徊。例如:

library(ggplot2)
library(dplyr)

d <- mtcars %>% mutate_at(vars(am, cyl, carb, gear, vs), as.factor) # make factors from vars
p <- ggplot(
  data = d,
  aes(x = am, fill = cyl)
) + geom_bar()

结果是

现在,我检查从绘图构建的对象中的基础数据

built <- ggplot2::ggplot_build(p)

我可以看到这样的东西:

> built$data[[1]]
     fill  y count prop x flipped_aes PANEL group ymin ymax xmin xmax colour size linetype alpha
1 #F8766D 19     3    1 1       FALSE     1     1   16   19 0.55 1.45     NA  0.5        1    NA
2 #00BA38 16     4    1 1       FALSE     1     2   12   16 0.55 1.45     NA  0.5        1    NA
3 #619CFF 12    12    1 1       FALSE     1     3    0   12 0.55 1.45     NA  0.5        1    NA
4 #F8766D 13     8    1 2       FALSE     1     4    5   13 1.55 2.45     NA  0.5        1    NA
5 #00BA38  5     3    1 2       FALSE     1     5    2    5 1.55 2.45     NA  0.5        1    NA
6 #619CFF  2     2    1 2       FALSE     1     6    0    2 1.55 2.45     NA  0.5        1    NA

我的问题是,如何获得映射到fill 美学的因子级别对应于上述数据集中的哪个填充值的明确信息?我的示例非常简单,但真正的用例是我所拥有的所有输入只是 ggplot 类的图。

【问题讨论】:

您可以随时从built$plot$scales$scales 深入了解内部结构:built$plot$scales$scales[[2]]$range$range 为您提供值,built$plot$scales$scales[[2]]$palette.cache 为您提供颜色。 在您分享的图片中,您可以看到cyl的哪个级别匹配哪个颜色,不是吗? 【参考方案1】:
library(tidyverse)

d <- mtcars %>% mutate_at(vars(am, cyl, carb, gear, vs), as.factor) # make factors from vars

p <- ggplot(
  data = d,
  aes(x = am, fill = cyl)
) + geom_bar()

q <- ggplot_build(p)

# mappings
q[["plot"]][["mapping"]]
#> Aesthetic mapping: 
#> * `x`    -> `am`
#> * `fill` -> `cyl`

# fill levels
q[["plot"]][["scales"]][["scales"]][[2]][["palette.cache"]]
#> [1] "#F8766D" "#00BA38" "#619CFF"

# mapped aesthetic levels
q[["plot"]][["scales"]][["scales"]][[2]][["range"]][["range"]]
#> [1] "4" "6" "8"

由reprex package (v2.0.1) 于 2021 年 12 月 14 日创建

【讨论】:

非常有帮助!它也适用于 R 4.1.2 上的更新包,因此您可以安全地编辑您的答案并删除 3 个过时的警告。

以上是关于很想弄清楚 R 中的条形图上哪个因子级别已映射到哪个填充颜色?的主要内容,如果未能解决你的问题,请参考以下文章

带有ggplot2的发散堆积条形图:图例中的因子排序问题

在R中的单个图上绘制两个变量的条形图和第三个变量的线图

R中的鬼因子水平[重复]

r语言 条形图上有数值

仅按因子变量的一个级别对条形图进行排序

R语言使用ggplot2可视化堆叠条形图,并在堆叠条形图上显示数据值实战