我需要使用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中使用重新排序功能来实现这一目标?
答案 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")