gpt4 book ai didi

r - 如何绘制大量具有不同分类变量的密度图

转载 作者:行者123 更新时间:2023-12-01 13:51:52 25 4
gpt4 key购买 nike

我有一个数据集,其中有一个数值变量和许多分类变量。我想制作一个密度图网格,每个图显示不同分类变量的数值变量的分布,填充对应于每个分类变量的子组。例如:

library(tidyverse)
library(nycflights13)

dat <- flights %>%
select(carrier, origin, distance) %>%
mutate(origin = origin %>% as.factor,
carrier = carrier %>% as.factor)

plot_1 <- dat %>%
ggplot(aes(x = distance, fill = carrier)) +
geom_density()

plot_1

plot_2 <- dat %>%
ggplot(aes(x = distance, fill = origin)) +
geom_density()

plot_2

我想找到一种方法来快速制作这两个图。现在,我知道如何做到这一点的唯一方法是单独创建每个图,然后使用 grid_arrange 将它们放在一起。但是,我的真实数据集有大约 15 个分类变量,所以这会非常耗时!

有没有更快更简单的方法来做到这一点?我认为最难的部分是每个情节都有自己的传说,所以我不确定如何绕过这个绊脚石。

最佳答案

这个解决方案给出了列表中的所有地 block 。在这里,我们制作了一个函数,它接受您想要绘制的变量,然后将 lapply 与您想要绘制的所有变量的向量一起使用。

fill_variables <- vars(carrier, origin)

func_plot <- function(fill_variable) {
dat %>%
ggplot(aes(x = distance, fill = !!fill_variable)) +
geom_density()
}

plotlist <- lapply(fill_variables, func_plot)

如果您不知道那些 !! 是什么意思,我建议您观看 this 5 minute video that introduces the key concepts of tidy evaluation .当你想创建这种包装函数以编程方式做事时,这就是你想要使用的。希望对您有所帮助!


编辑:如果您想提供一个字符串数组而不是一个 quosure,您可以将 !!fill_variable 更改为 !!sym(fill_variable)如下:

fill_variables <- c('carrier', 'origin')

func_plot <- function(fill_variable) {
dat %>%
ggplot(aes(x = distance, fill = !!sym(fill_variable))) +
geom_density()
}

plotlist <- lapply(fill_variables, func_plot)

关于r - 如何绘制大量具有不同分类变量的密度图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com