2010-10-22 5 views
3

J'ai data.frame avec des entrées comme:Comment commander des pauses avec ggplot/geom_bar

 
    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 
     ... 

Lors du traçage qui précède, avec la rupture = Variable, je voudrais que l'ordre à conserver, plutôt que placé dans l'ordre alphabétique.

Je suis rendu avec:

 
ggplot (data, aes(x=variable, weight=importance, fill=variable)) + 
    geom_bar() + 
    coord_flip() + opts(legend.position='none') 

Cependant, l'ordre des noms de variables est alphabétique, et non l'ordre dans le cadre de données. J'avais vu un article sur l'utilisation de "order" dans aes, mais il semble n'avoir aucun effet.

Je cherche à faire une pause en ligne avec la colonne "order".

Il semble y avoir une question similaire How to change the order of discrete x scale in ggplot, mais franchement, n'a pas compris la réponse dans ce contexte.

+1

Pour votre information: Il est plus facile pour les gens de répondre si vous utilisez 'dput' et ajouter un petit échantillon des données à la fin de votre poste (ou bien utiliser un niveau mondial disponible ensemble de données du paquet 'datasets' dans la base R). – Shane

+0

Est-ce que 'variable' est un caractère ou un facteur? –

+0

variable est un facteur. Je vais regarder les réponses ci-dessous ... –

Répondre

6

Essayez:

data$variable <- factor(data$variable, levels=levels(data$variable)[order(-data$order)]) 

De: ggplot2 sorting a plot Part II

+0

On dirait que c'est la solution la plus simple. merci –

1

Un coup dans l'obscurité, mais peut-être quelque chose comme ceci:

data$variable <- factor(data$variable, levels=data$variable) 
2

Une autre solution consiste à tracer l'ordre et changer la étiquettes après le fait:

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') 
+0

Merci. Cela résout. Souhait qu'il y avait une approche intégrée avec un attribut d'ordre, mais je suppose que ne serait pas une fonctionnalité largement utilisée. –

4

encore plus court et plus facile à comprendre:

data$Variable <- reorder(data$Variable, data$order) 
Questions connexes