2016-05-03 1 views
-1

Comment pourrais-je tracer un graphique à barres montrant le pourcentage, par sexe et pour chacun des différents niveaux de varfusion ggplot et le tracé de graphique à barres

Les données peuvent être construites comme suit:

structure(list(var = structure(c(5L, 5L, 5L, 6L, 5L, 4L, 5L, 
6L, 6L, 6L, 5L, 5L, 5L, 6L, 6L, 5L, 6L, 5L, 6L, 5L), .Label = c("-97:\nMultiple\nResponse", 
"-99:\nRefused", "1:\nDefinitely", "2:\nProbably", "3:\nProbably\nnot", 
"4:\nDefinitely\nnot"), class = "factor"), GENDER = structure(c(1L, 
2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L), .Label = c("1: Male", "2: Female", "3: Unknown"), class = "factor")), .Names = c("var", 
"GENDER"), row.names = c(NA, 20L), class = "data.frame") 

I voulez que les barres dans gender totalisent chacune jusqu'à 100%

Répondre

1

Résumez les données pour obtenir un pourcentage de GENDER dans chaque niveau de var. Ci-dessous, j'utilise dplyr pour le faire à la volée dans l'appel le ggplot. J'ai appelé votre bloc de données dat:

library(dplyr) 
library(scales) 

ggplot(dat %>% group_by(var, GENDER) %>% 
     tally %>% 
     mutate(pct=n/sum(n)), aes(var, pct, fill=GENDER)) + 
    geom_bar(stat="identity") + 
    scale_y_continuous(labels=percent_format()) 

enter image description here

MISE À JOUR: Pour assurer les catégories vides sont incluses:

ggplot(dat %>% group_by(var, GENDER) %>% 
     tally %>% 
     mutate(pct=n/sum(n))) + 
    geom_bar(stat="identity", aes(var, pct, fill=GENDER)) + 
    scale_y_continuous(labels=percent_format()) + 
    scale_x_discrete(drop=FALSE) 
+0

Cela ne fonctionne pas très bien. Le premier niveau est manquant et chacune des catégories de réponse est additionnée à 100%. – vashts85

+0

Certains niveaux sont manquants car ils ne sont pas présents dans l'échantillon de données que vous avez fourni. En ce qui concerne les barres totalisant 100%, il semblait que votre question demandait que les barres totalisent 100% pour chaque valeur de var. Si j'ai mal interprété, veuillez expliquer comment vous voulez regrouper les données. – eipi10

+0

En fait, votre flux de travail fonctionne très bien, il m'a juste fallu une minute. Comment changer un peu l'ordre pour que toutes les valeurs de 'var' soient affichées? Voici ce que j'ai essayé, mais il omet d'accomplir certaines des valeurs de 'var' qui ne sont pas présents: ggplot (dat%>% group_by (GENRE, var)%>% % tally>% muter (pct = n/somme (n)), aes (GENRE, pct, remplir = var)) + geom_bar (stat = "identité", position = "esquive") + scale_y_continuous (labels = percent_format()) + scale_x_discrete (drop = FALSE) – vashts85