如何在ggplot的aes_string中调用reorder

时间:2017-05-16 10:46:59

标签: r ggplot2

我需要使用ggplot& amp;重新排序从高到低(从左到右)的条形图。 aes_string()。对于例如对于数据帧df< -f(X,Y,Z),这可以用

完成
 ggplot(top10,aes(x=reorder(X,-Y),y=Y,fill=X) + geom_bar(stat="identity")

但我需要通过引用数据帧的列号而不是列名来实现这一点,如下所示

 ggplot(top10, aes_string(x=colnames(top10)[num1],y=meanFeat, 
 fill=colnames(top10)[num1])) +  geom_bar(stat="identity")

上面的语句使用列号绘制输出。但是它不会从高到低重新排序(从左到右)

如何在aes_string中使用重新排序功能来实现这一目标?

2 个答案:

答案 0 :(得分:10)

由于aes_string适用于字符串,因此请使用paste

ggplot(top10, aes_string(x=paste0("reorder(",colnames(top10)[num1],", -Y)"),y=meanFeat,
 fill=colnames(top10)[num1])) +  geom_bar(stat="identity")

答案 1 :(得分:0)

对于最新版本的ggplot,应将aes!!sym()结合使用,以将字符串转换为符号。

ggplot(top10, 
  aes(
    x = reorder(!!sym(colnames(top10)[num1]), meanFeat),
    y = meanFeat, 
    fill=!!sym(colnames(top10)[num1]))) +  
  geom_bar(stat="identity")