R将变量列索引传递给ggplot2

R将变量列索引传递给ggplot2,r,ggplot2,dataframe,R,Ggplot2,Dataframe,我正在尝试将列索引作为我将重复使用的函数的一部分传递给ggplot。 比如: myplot您可以使用aes_字符串代替aes来传递字符串而不是使用对象,即: myplot = function(df, x_string, y_string) { ggplot(df, aes_string(x = x_string, y = y_string)) + geom_point() } myplot(df, "A", "B") myplot(df, "B", "A") 谢谢,它可以工作,但不理

我正在尝试将列索引作为我将重复使用的函数的一部分传递给ggplot。 比如:


myplot您可以使用
aes_字符串
代替
aes
来传递字符串而不是使用对象,即:

myplot = function(df, x_string, y_string) {
   ggplot(df, aes_string(x = x_string, y = y_string)) + geom_point()
 }
myplot(df, "A", "B")
myplot(df, "B", "A")

谢谢,它可以工作,但不理想,因为我必须手动指定列名。有没有办法解决这个问题?
aes\u字符串(colnames(df)[1],colnames(df)[2])
通常,在
ggplot2
中,您不在
aes
中提供向量。在
aes
中,您提供了绘图美学到数据列的映射,而无需在
aes
中对数据进行硬编码。例如,如果列名为
a-b
,则会在eval(expr,envir,enclose)中出现错误
错误:未找到对象“a-b”
。使用
environment=environment()
aes
是另一种修复方法,正如上面OP的帖子中链接的那样。@PaulHiemstra,我已经链接了一种方法(根本不使用列名)。如果您坚持使用列名,请尝试以下方法:
set.seed(45);df您的问题标题似乎与Paul Hiemstra的答案相对应,即使用字符串列名。但是你的问题的主体是关于使用他们的索引,这确实是一个重复的标记。我建议你改变问题的主体,使之与答案相匹配。@MaxGhenis这两种情况(以及更多)都在Paul的答案和下面的评论中得到了回答。我明白了。内容的不匹配对于那些偶然发现这一点的人来说仍然令人困惑;问题应该具体明确。更改它也可能会提供一个机会,使其作为副本进行解冻。@MaxGhenis您建议如何修改标题?编辑:忽略以下内容,我最初并没有误读。问题应为“将变量列索引传递给ggplot2”,并正确标记为重复项。奥利格;忽略:糟糕,对不起,我刚刚意识到我误解了这个问题,认为通过指数是有问题的。这只是一个虚假的重复标记,可能需要比我有更多业力的人来请求复查。很抱歉,N8TRO!
require(ggplot2)

myplot <- function(df){
   ggplot(df, aes_string(colnames(df)[1], colnames(df)[2])) + geom_point()
}
myplot = function(df, x_string, y_string) {
   ggplot(df, aes_string(x = x_string, y = y_string)) + geom_point()
 }
myplot(df, "A", "B")
myplot(df, "B", "A")