2017-08-01 1 views
0

Je viens de trouver la fonction facet_grid dans ggplot2, c'est génial. La question est: J'ai une liste avec 6 pays (colonne HC) et la destination des vols dans le monde entier. Mes données ressemblent à ceci:Comment afficher des valeurs plus élevées dans ggplot2 dans facet_grid

  HC Reason Destination freq  Perc 
     <chr> <chr>  <chr> <int>  <dbl> 
1 Germany Study  Germany  9 0.3651116 
2 Germany Work  Germany  3 0.1488095 
3 Germany Others  Germany  3 0.4901961 
4 Hungary Study  Germany 105 21.4285714 
5 Hungary Work  Germany 118 17.6382661 
6 Hungary Others  Germany 24 5.0955414 
7 Luxembourg Study  Germany 362 31.5056571 

Est-il possible que dans chaque pays ne montrent que les dix premières destinations et en utilisant la fonction facet_grid? Im essayant de faire un diagramme de dispersion de cette façon:

Geograp %>% 
    gather(key=Destination, value=freq, -Reason, -Qcountry) %>% 
    rename(HC = Qcountry) %>% 
    group_by(HC,Reason) %>% 
    mutate(Perc=freq*100/sum(freq)) %>% 
    ggplot(aes(x=Perc, y=reorder(Destination,Perc))) + 
    geom_point(size=3) + 
    theme_bw() + 
    facet_grid(HC~Reason) + 
    theme(panel.grid.major.x = element_blank(), 
     panel.grid.minor.x = element_blank(), 
     panel.grid.major.y = element_line(colour = "grey60", linetype = "dashed")) 

qui produit ce graphique: enter image description here Je veux éviter le overplotting dans l'axe des y. Merci d'avance!!!

Répondre

1

Vous pouvez créer une variable indiquant le rang de chaque destination par pays, puis dans l'appel ggplot sélectionner les lignes avec le classement < = 10, par exemple PS: Actuellement, vous créez des données et tracez des données sur une seule ligne en utilisant des tuyaux. Je voudrais séparer la création de données et l'étape de traçage.

0

Comme vous n'avez pas posté vos données au format correct (consultez dput()), j'ai utilisé juste un exemple de données. En utilisant package dplyr i regroupé dans ce cas par la variable grp (group_by(grp), dans votre cas, il est un pays ) et sélectionné les 10 lignes (...top_n(n = 10,...) qui sont triés par variable x (wt = x, dans votre cas, il sera fréq) et tracée davantage (juste dans ce cas, diagramme de dispersion):

library(dplyr) 
set.seed(123) 
d <- data.frame(x = runif(90),grp = gl(3, 30)) 

d %>% 
group_by(grp) %>% 
top_n(n = 10, wt = x) %>% 
ggplot(aes(x=x, y=grp)) + geom_point() 
+0

Merci pour votre réponse! Mon problème est que dans chaque pays (la colonne HC) a ses propres "Top 10 destinations". Existe-t-il un moyen simple d'intégrer la fonction top_n avec faced_grid? –

+0

Je ne comprends pas vraiment ce que vous voulez dire, qu'est-ce que cela signifie que la colonne HC a ses propres 10 meilleures destinations? Où est-elle montrée dans Votre table? Quel genre de 10 Destinations principales Vous voulez montrer? –

+0

Je veux dire, HC est le pays d'origine du voyage et Destination est le pays de destination. Donc chaque "pays d'origine" possède ses propres "Top 10 destinations". Cependant votre réponse me donne un bon point de départ !! Je vous remercie! –