2016-05-15 6 views
3

Ich habe diese Handlung von der an geantworteten neu erstellt. Aber ich wollte wissen, wie man die Balken entweder überlagern oder ersetzen kann, indem man die Punkte auf der X-Achse miteinander verbindet. Wenn sie die Balken ersetzt, wäre es schön, sie mit der Farbe zu füllen. Ich habe versucht, mit geom_smooth herumzuspielen, aber ich kann es nicht dazu bringen, das zu tun, was ich will, und Hilfe würde am meisten geschätzt werden. Die Handlung und der Code aus der Frage, die ich diskutiere, sind unten.Glätten Sie Rücken an Rücken Balkendiagramm in ggplot

set.seed(1) 
df0 <- data.frame(Age = factor(rep(x = 1:10, times = 2)), 
        Gender = rep(x = c("Female", "Male"), each = 10), 
        Population = sample(x = 1:100, size = 20)) 

head(df0) 
# Age Gender Population 
# 1 1 Female   27 
# 2 2 Female   37 
# 3 3 Female   57 
# 4 4 Female   89 
# 5 5 Female   20 
# 6 6 Female   86 

library("ggplot2") 
ggplot(data = df0, aes(x = Age, y = Population, fill = Gender)) + 
    geom_bar(data = subset(df0, Gender=="Female"), 
      stat = "identity") + 
    geom_bar(data = subset(df0, Gender=="Male"), 
      stat = "identity", 
      position = "identity", 
      mapping = aes(y = -Population)) + 
    scale_y_continuous(labels = abs) + 
    coord_flip() 

Simple pyramid plot

Antwort

0

Ohne zu wissen, welches Problem Sie mit geom_smooth konfrontiert, ich nur, warum es nicht funktioniert erraten kann. Vielleicht hängt es damit zusammen, dass Sie Age als Faktor in Ihren Datenrahmen werfen?

I umgewandelt Alter auf numerische & die für mich gearbeitet folgende:

df1 <- df0 %>% mutate(Age = as.numeric(as.character(Age))) 
ggplot(df1, 
     aes(x = Age, y = Population, fill = Gender, colour = Gender)) + 
    geom_bar(data = subset(df1, Gender=="Female"), alpha = 0.5, 
      stat = "identity") + 
    geom_bar(data = subset(df1, Gender=="Male"), alpha = 0.5, 
      stat = "identity", 
      position = "identity", 
      mapping = aes(y = -Population)) + 
    geom_smooth(data = subset(df1, Gender=="Female"), se = F) + 
    geom_smooth(data = subset(df1, Gender=="Male"), se = F, 
       mapping = aes(y=-Population)) + 
    scale_y_continuous(labels = abs) + 
    coord_flip() 

Resulting chart (smoothed lines overlaid on bars)

Verwandte Themen