ggplot2将变量传递给绘图函数

5

我使用ggplot来创建多个图形,因此我建立了自己的函数。

plothist <- function(a) {
  ggplot(aes(x = a), data = data) + geom_histogram()
}

p1 <- plothist(data$fixed.acidity)
p2 <- plothist(data$volatile.acidity)
p3 <- plothist(data$citric.acid)
p4 <- plothist(data$residual.sugar)
p5 <- plothist(data$chlorides)
p6 <- plothist(data$free.sulfur.dioxide)
p7 <- plothist(data$total.sulfur.dioxide)
p8 <- plothist(data$density)
p9 <- plothist(data$pH)
p10 <- plothist(data$sulphates)
p11 <- plothist(data$alcohol)

x <- grid.arrange(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11,
                  top = "Histogram of independent variables")
x

X轴没有变量名称,我只能在每个图中看到"a",这使得图表几乎没有用处。你能帮我如何显示实际的变量吗?


非常感谢你,Nathan!完美运作! :-) - user7353167
2个回答

2

你的函数只需要进行小修改:

plotHist <- function(inputData, columnToPlot) {
    # Load library as your function doesn't know
    # what is this ggplot function you want to use
    library(ggplot2)
    resultPlot <- ggplot(inputData, aes(get(columnToPlot))) + 
        geom_histogram() +
        labs(x = columnToPlot)
    return(resultPlot)
}
plotHist(mtcars, "cyl")
columnToPlot 是您想绘制的列的名称。此外,您需要将 inputData 参数传递给您的给定函数,因为它不知道 dinputData 是什么。

2
请使用aes_string进行这种类型的编程:
library(ggplot2)

plothist <- function(data, column) {
  ggplot(data, aes_string(x = column)) + geom_histogram()
}

plothist(data, "fixed.acidity")

如果您想将字符串与非字符串混合使用怎么办?可以使用aes(get("STRING"), non-STRING),但是aes_string("STRING", non-STRING)呢? - pogibas
@PoGibas,我强烈建议在函数中避免非标准评估。如果你真的需要这样做,请使用aes_。我不擅长使用它,因为我从未觉得有必要。通常,在函数内添加列并按名称引用它们会导致更简单的代码。 - Nathan Werth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接