【问题标题】:How to set ggplot parametres in a function argument如何在函数参数中设置ggplot参数
【发布时间】:2017-10-05 18:58:35
【问题描述】:

我正在尝试在一个循环中创建多个图(使用 ggplot2),并且我正在使用以下函数。

我使用 iris 数据集并添加了一个名为“ran_fact”的随机因子变量。因此数据集现在有四个数值变量和两个因子(Species 和 ran_fac)。

此时循环遍历数值变量并为每个变量创建一个图。这两个因子变量是在循环内手动设置的(作为图 x 轴和颜色),这使得它不太通用。我想知道是否可以将 x 轴和颜色选项设置为函数参数,如果可以,如何做到这一点?

提前谢谢你。

另外,作为一个附带问题,select_if(x, is.numeric) 下面似乎没有从数据集中删除因子变量。

library(datasets)
library(dplyr)
library(ggplot2)
library(beeswarm)

data(iris)
iris$ran_fac <- as.factor(c("A", "B", "C", "D", "E"))

plotFunc <- function(x, na.rm = TRUE,...) {
    plot_list = list()
    nm <- select_if(x, is.numeric)
    nm <- names(x)
    for (i in seq_along(nm)) {
        plots <-ggplot(x,aes_string("ran_fac", nm[i], color="Species")) + geom_quasirandom() + geom_boxplot()
        plot_list[[i]] = plots
        print(plots)
        ggsave(plots,filename=paste("myplot",nm[i],".png",sep=""))
    }
}

plotFunc(iris)

Beeswarm plot

【问题讨论】:

  • 请正确缩进您的代码。我帮你修好了。
  • 如果您能更明确地了解所需的输出是什么,这将有所帮助。你到底想怎么调用函数,你希望结果是什么?
  • select_if(is.numeric) 返回因子的示例在哪里?如果我运行 sapply(iris, class) 我看到 Species 是一个因素,如果我运行 names(dplyr::select_if(iris, is.numeric)) 它不会返回。
  • 嗨 Silke,关于“select_if”问题,我认为问题在于您正在尝试检索原始数据框的名称(虹膜,请参阅函数中的 x)而不是检索名称来自子集数据帧 (nm)。在函数中,select_if 函数不是从数据框 iris 中删除变量,而是使用选定的数值变量创建一个新变量。如果您使用“nm
  • 当然,@storm spray,就是这样。我现在觉得有点愚蠢;)。谢谢。

标签: r ggplot2 function


【解决方案1】:

好的,我在这个问题Passing arguments to ggplot in a wrapper 中找到了答案。我调整了我的功能,下面按预期工作。我现在可以在开始时设置 x 轴和颜色。

library(datasets)
library(dplyr)
library(ggplot2)

data(iris)

iris$ran_fac <- as.factor(c("A", "B", "C", "D", "E"))

xcol <- iris$ran_fac
colorVar <- iris$Species

plotFunc <- function(data, na.rm = TRUE, x, color,...) {
  plot_list = list()
  nm <- select_if(data, is.numeric)
  nm <- names(nm)
  for (i in seq_along(nm)) {
    plots <- ggplot(data = data, aes_string(x = "xcol", nm[i], color = "colorVar")) + geom_quasirandom() + geom_boxplot()
    plot_list[[i]] = plots
    print(plots)
    ggsave(plots, filename = paste("myplot", nm[i],".png", sep=""))

  }
}

plotFunc(iris)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2019-02-06
    • 1970-01-01
    相关资源
    最近更新 更多