2017-10-17 5 views
3
library(ggplot2) 
library(data.table) 

age = sample(1:100,100,T) 
segment = sample(1:5,100,T) 

data = data.frame(age,segment) 

setDT(data)[age > 0 & age < 20, agegroup := "0-19"] 

data[age >19 & age <40, agegroup := "20-39"] 
data[age >39 & age <60, agegroup := "40-59"] 
data[age >59, agegroup := "60+"] 

Je souhaite représenter la répartition par âge globale et par segment.Graphique de répartition globale par superposition avec répartition par segment

enter image description here

Les lignes en pointillés est la répartition globale et chaque segment sage pour que je puisse comparer comment est le segment et la distribution d'ensemble. comment superposer deux graphiques dans un graphique?

+0

pouvez-vous s'il vous plaît montrer le code que vous essayez –

+0

S'il vous plaît passer par de comprendre comment dessiner 'ggplot' - http://www.cookbook-r.com/Graphs/Bar_and_line_graphs_ (ggplot2)/ –

+0

Merci pour la réponse rapide. J'ai essayé ce ggplot (données = données, aes (x = groupe d'âge, y = segment)) + geom_bar (stat = "identité") mais im collé pour superposer les deux parcelles –

Répondre

3

Vous devez créer ensemble de données supplémentaires pour la distribution dans l'ensemble, les fusionner et tracer avec différentes geom_bar « s.

library(ggplot2) 
library(data.table) 

# Using OPs data 
data <- data[, .N, .(segment, agegroup)] 
data2 <- data[, sum(N), .(agegroup)] 
data3 <- merge(data, data2) 


data3 <- merge(data3, data3[, .(MAX = max(N)), segment], "segment") 

ggplot(data3, aes(agegroup)) + 
    geom_bar(aes(y = V1), 
      stat = "identity", position = "dodge", 
      color = "black", fill = "white", 
      linetype = 2) + 
    geom_bar(aes(y = N, fill = N == MAX), 
      stat = "identity", position = "dodge", 
      width = 0.6, color = "black") + 
    facet_wrap(~ segment) + 
    labs(x = "Age group", 
     y = "Number of observations") + 
    theme_bw() + 
    scale_fill_manual(values = c("grey", "grey5")) + 
    theme(legend.position = "none") 

enter image description here

+0

Merci beaucoup. pouvez-vous s'il vous plaît suggérer est-il une meilleure façon de représenter ce type de données? comparer des segments avec des données globales? après avoir regardé le graphique, ce n'est pas convaincant. ou pouvez-vous s'il vous plaît me dire comment mettre en évidence le groupe d'âge avec la plupart des observations dans chaque segment. exemple dans le segment 1 60+ doit mettre en évidence avec d'autres couleurs ou gras dans le segment 4 groupe d'âge 20-39 comme ça et aussi je voulais ligne pointillée doit changer à la ligne normale –

+0

@KalyanKumar En fait, j'aime comment les données sont présentées ici (comme x- axe est catégorique barres est le seul moyen de le présenter). Vous pouvez changer la ligne normale avec l'option 'type de ligne '. – PoGibas

+0

Merci. que diriez-vous des pourcentages/proportions au lieu des nombres? Pouvez-vous s'il vous plaît inclure les pourcentages. –

1

Vous pouvez utiliser ggplot comme ça

windows() 
ggplot() + 
geom_bar(data=data, aes(x=agegroup, y=age), stat = "identity", fill = "red") + # Overall plot 
geom_bar(data=data[segment == 2,], aes(x=agegroup, y=age), stat = "identity", , fill = "blue") # segment 1