【问题标题】:using an apply function with ggplot2 to create bar plots for more than one variable in a data.frame使用带有 ggplot2 的 apply 函数为 data.frame 中的多个变量创建条形图
【发布时间】:2017-01-27 13:50:36
【问题描述】:

有没有办法在 R 中使用 apply 函数来创建带有 ggplot2 的条形图?

比如说,我们有一个数据框,其中仅包含因子变量,其中一个是布尔变量。就我而言,我有一个带有 +40 个变量的日期框。可以用一行代码绘制所有变量与布尔变量吗?

  data("diamonds")
factors <- sapply(diamonds, function(x) is.factor(x))
factors_only <- diamonds[,factors]
factors_only$binary <- sample(c(1, 0), length(factors_only), replace=TRUE)
factors_only$binary <- as.factor(factors_only$binary)

但我想创建这样的条形图:

qplot(factors_only$color, data=factors_only, geom="bar", fill=factors_only$binary)

这不起作用:

  sapply(factors_only,function(x) qplot(x, data=factors_only, geom="bar", fill=binary))

请指教

【问题讨论】:

  • 你可以重塑你的数据,并使用facet_m = reshape2::melt(factors_only, id="binary") ; ggplot(m, aes(value, fill=binary)) + geom_bar() + facet_grid(. ~ variable, scale="free_x")(但你需要在m$value上使用factor重新排列你的条形图:也许沿着这些思路:aes(factor(value, levels=unlist(lapply(factors_only, levels))), fill=binary)

标签: r ggplot2 lapply


【解决方案1】:

您可以使用lapply 遍历变量名,然后使用get 拉出当前变量。

temp <- lapply(names(factors_only),
               function(x) qplot(get(x), data=factors_only, geom="bar", fill=binary, xlab=x))

要打印列表项,

print(temp[[1]])

会产生

遍历变量名的一个很好的功能是您可以使用这些来动态命名图中的标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 2019-02-15
    • 2021-07-26
    • 2018-01-07
    • 2022-08-20
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多