R:ggplot指定列的索引而不是名称

时间:2013-04-24 08:28:53

标签: r plot ggplot2 dataframe

我编写了一个函数来使用ggplot函数获取比例堆积条形图。现在我在这个ID中使用列名。

PropBarPlot<-function(df, mytitle=""){
    melteddf<-melt(df, id="ID", na.rm=T)
    ggplot(melteddf, aes(ID, value, fill=variable)) + 
      geom_bar(position="fill") + 
      theme(axis.text.x = element_text(angle=90, vjust=1)) + 
      labs(title=mytitle)
}

我想让它变得通用。所以我想使用列索引而不是列名。我尝试过做这样的事情。

PropBarPlot<-function(df, mytitle=""){
    melteddf<-melt(df, id=names(df)[1], na.rm=T)
    ggplot(melteddf, aes(names(df)[1], value, fill=variable)) + 
      geom_bar(position="fill") + 
      theme(axis.text.x = element_text(angle=90, vjust=1)) + 
      labs(title=mytitle)
}

但没有用。有人可以建议我怎么做吗?

感谢。

1 个答案:

答案 0 :(得分:6)

正如@baptiste所指出的,你应该使用aes_string()而不是aes()来定义x和y值。另外,您应该将valuevariable放在引号内。

PropBarPlot<-function(df, mytitle=""){
  melteddf<-melt(df, id=names(df)[1], na.rm=T)
  ggplot(melteddf, aes_string(x=names(df)[1],y= "value", fill="variable")) + 
    geom_bar(position="fill") + 
    theme(axis.text.x = element_text(angle=90, vjust=1)) + 
    labs(title=mytitle)
}