2017-10-20 10 views
0

J'essaie de tracer la proportion de diamants en utilisant geom_bar et position = "dodge". Voici ce que j'ai fait.ggplot2: tracer des proportions correctes en utilisant geom_bar

library(ggplot2) 

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut)) 

L'image ci-dessous me dire combien de diamants sont là pour chaque type cut.

enter image description here

Maintenant, nous allons faire quelque chose de fantaisie.

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge") 

L'image ci-dessous fournit le nombre de diamants en regroupant par clarity pour chaque type cut.

enter image description here

Ce que je voudrais faire est d'obtenir la même parcelle esquive comme ci-dessus, mais au lieu de montrer la proportion comte. Par exemple, pour cut=ideal et clarity = VS2, la proportion doit être 5071/21551 = 0.23.

+1

Pas besoin d'une colonne supplémentaire: 'ggplot (data = diamants) + geom_bar (mapping = aes (x = cut, y = ..count .. /sum(..count ..), fill = clear), position = "dodge") ' –

+0

@MauritsEvers Cela ne donne pas le résultat désiré (par exemple, exécutez-le et regardez la valeur de' cut = ideal' et 'clarté = VS2' - ce n'est pas 0,23). – Lyngbakr

+0

@Lyngbakr Ah oui, vous avez raison! OP veut des fractions * per (cut) group *. Ma solution donne des fractions de total. Dans ce cas, je calculerais les fractions par groupe manuellement, et tracerai avec 'geom_bar (stat =" identity ", ...)' comme @Wimpel suggéré. –

Répondre

2

Vous pouvez

library(tidyverse) 
diamonds %>% 
    count(cut, clarity) %>% 
    group_by(cut) %>% 
    mutate(Sum=sum(n)) %>% 
    mutate(proportion = n/Sum) %>% 
    ggplot(aes(y=proportion, x=cut,fill=clarity)) + 
    geom_col(position = "dodge") 

enter image description here

+0

Merci, c'est ce que je cherchais. –

-1

créer une colonne avec les pourcentages corrects (nommé « pourcentage »), et utiliser

require(ggplot2) 
require(scales) 

ggplot(data = diamonds) + 
geom_bar(mapping = aes(x = cut, y = percentage, fill = clarity), position = "dodge") + 
scale_y_continuous(labels = scales::percent) 

Vous pouvez également calculer la ligne de pourcentage, Maurits Evers suggère.

+0

Il demande la proportion non le pourcentage. – Lyngbakr

+0

ah, vous avez raison .. manqué que :) – Wimpel