R将变量列索引传递给ggplot2

N8T*_*TRO 67 r ggplot2 dataframe

我试图将列索引传递给ggplot作为我将重复使用的函数的一部分.喜欢:

myplot <- function(df){
    ggplot(df, aes(df[, 1], df[, 2])) + geom_point()
}
Run Code Online (Sandbox Code Playgroud)

我总是使用第一列作为我的x变量,第二列作为我的y变量,但列名在数据集之间变化.我到处搜索了......有什么想法吗?

编辑:

这是我用过的答案:

require(ggplot2)

myplot <- function(df){
   ggplot(df, aes_string(colnames(df)[1], colnames(df)[2])) + geom_point()
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*tra 103

您可以使用aes_string在代替的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")
Run Code Online (Sandbox Code Playgroud)

  • `aes_string(colnames(df)[1],colnames(df)[2])` (10认同)
  • @PaulHiemstra,我已经链接了一种方法(根本不使用列名).如果你坚持使用列名,那么试试这个:`set.seed(45); df < - data.frame(x = gl(5,5),y = runif(25)); myplot2 = function(df,col1,col2){ggplot(df,aes(x = get(names(df)[col1]),y = get(names(df)[col2])),environment = environment()) + geom_point()}`.从这里可以直接更改此函数以将列名称作为参数. (5认同)