如何将数据框列名从字符串转换为适用于(qplot,ggplot2)的参数?

11
我想编写一个函数,它接受一个数据框,并将该数据框中的所有列作为直方图绘制出来。
对于那些我事先知道其列名称的数据框,可以编写如下代码:
qplot(colname1, data=df, geom='histogram')
qplot(colname2, data=df, geom='histogram')
...

但我希望能够通用地实现,因此我可以使用列名字符串"colname1"

换句话说,如何编写:

plot_histogram_of_column <- function(df, colname) {
    # qplot(colname, data=df, geom='histogram') won't work
}
1个回答

19

使用ggplotaes_string。类似这样:

ggplot(data = df, aes_string(x = colname)) + geom_histogram()

aes_string是专门为此目的编写的。


2
如此记录在这里:http://had.co.nz/ggplot2/aes.html但需要注意的是,据我所知,ggplot2文档网站上没有任何页面链接到此页面,因此找到它的唯一方法是知道搜索它。 - Maxy-B
@Maxy-B 在0.9.0版本中,内置文档(?aes)得到了很大的改进,并包含了aes_string帮助页面的链接。我不记得在8.9.0版本中是否也是这样。 - joran
是的。我刚刚独立解决了与此相关的问题。这个函数非常难以发现,但却很重要。当绘制大型数据集时,您想要参数化的第一件事情之一肯定是y系列的身份,然而示例并没有强调这一点。(我为了清晰起见编辑了您的标题) - smci
惯用的方式现在是:ggplot(data = df, aes(x = !!ensym(colname))) + geom_histogram() - moodymudskipper

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