I need to reorder a barplot from high to low (left to right) using ggplot & aes_string(). For e.g. for a dataframe df <- f(X,Y,Z) this can be done with
ggplot(top10,aes(x=reorder(X,-Y),y=Y,fill=X) + geom_bar(stat="identity")
But I need to achieve this by referring to column numbers of the dataframe instead of column names as shown below
ggplot(top10, aes_string(x=colnames(top10)[num1],y=meanFeat,
fill=colnames(top10)[num1])) + geom_bar(stat="identity")
The statement above plots the output using column numbers. However it does not reorder from high to low (left to right)
How can I use the re-order function within aes_string to achieve this?
With the latest version of ggplot, you should be use aes
with !!
and sym()
to turn your strings into symbols.
ggplot(top10,
aes(
x = reorder(!!sym(colnames(top10)[num1]), meanFeat),
y = meanFeat,
fill = !!sym(colnames(top10)[num1]))) +
geom_col()
or using the .data
pronoun
ggplot(top10,
aes(
x = reorder(.data[[ colnames(top10)[num1] ]], meanFeat),
y = meanFeat,
fill = .data[[ colnames(top10)[num1] ]])) +
geom_col()
Since aes_string
works with strings, use paste
:
ggplot(top10, aes_string(x=paste0("reorder(",colnames(top10)[num1],", -Y)"),y=meanFeat,
fill=colnames(top10)[num1])) + geom_bar(stat="identity")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With