很想弄清楚 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 中的条形图上哪个因子级别已映射到哪个填充颜色?的主要内容,如果未能解决你的问题,请参考以下文章