I find the easiest way is to just reorder your data before plotting. By specifying the reorder(()
inside aes()
, you essentially making a ordered copy of it for the plotting parts, but it’s tricky internally for ggplot
to pass that around, e.g. to the legend making functions.
This should work just fine:
df$Label <- with(df, reorder(Label, Percent))
ggplot(data=df, aes(x=Label, y=Percent, fill=Label)) + geom_bar()
I do assume your Percent
column is numeric, not factor or character. This isn’t clear from your question. In the future, if you post dput(df)
the classes will be unambiguous, as well as allowing people to copy/paste your data into R.