I have a data.frame with entries like:
variable importance order 1 foo 0.06977263 1 2 bar 0.05532474 2 3 baz 0.03589902 3 4 alpha 0.03552195 4 5 beta 0.03489081 5 ...
When plotting the above, with the breaks = variable, I would like for the order to be preserved, rather than placed in alphabetical order.
I am rendering with:
ggplot (data, aes(x=variable, weight=importance, fill=variable)) + geom_bar() + coord_flip() + opts(legend.position='none')
However, the ordering of the variable names is alphabetical, and not the order within the data frame. I had seen a post about using "order" in aes, but appears to have no effect.
I am looking to have a breaks ordering in-line with the "order" column.
There seems to be a similar question How to change the order of discrete x scale in ggplot,开发者_运维百科 but frankly, did not understand the answer in this context.
Try:
data$variable <- factor(data$variable, levels=levels(data$variable)[order(-data$order)])
From: ggplot2 sorting a plot Part II
Even shorter and easier to understand:
data$Variable <- reorder(data$Variable, data$order)
Another solution is to plot the order and then change the labels after the fact:
df <- data.frame(variable=letters[c(3,3,2,5,1)], importance=rnorm(5), order=1:5)
p <- qplot(x=order, weight=importance, fill=variable, data=df, geom="bar") +
scale_x_continuous("", breaks=1:5, labels=df$variable) +
coord_flip() + opts(legend.position='none')
A shot in the dark, but maybe something like this:
data$variable <- factor(data$variable, levels=data$variable)
精彩评论