2016-07-22 11 views
0

Ich versuche, eine gestapelte Identität barplot zu erstellen, aber ggplot2 hält meine Daten zusammen.Fehlerbehebung ggplot2 stacked bar plot

Anstatt das gestapelte Diagramm mit den jeweiligen Kategorien für jeden Sektor zu versehen, werden die Kategorien direct, indirect.down und indirect.up zusammengefasst.

test.df = data.frame(scenario=(c("s1", "s1", "s1", "s2", "s2", "s2", "s3", "s3", "s3", 
          "s1", "s1", "s1", "s2", "s2", "s2", "s3", "s3", "s3", 
          "s1", "s1", "s1", "s2", "s2", "s2", "s3", "s3", "s3")), 
       sector=(c("Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", 
         "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", 
         "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services", "Agriculture", "Manufacturing", "Services")), 
       loss=(runif(27,0,1000)), shock=(c("direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down", 
         "direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down", 
         "direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down","direct", "indirect.up", "indirect.down"))) 

library(ggplot2) 

ggplot(test.df, aes(x=sector, y=loss)) + geom_bar(stat = "identity", aes(fill=shock)) + facet_wrap(~ scenario) + coord_flip() 

Ich mag es so in Bezug auf prüfen, wie die Schocks auf jeden Sektor gestapelt sind:

enter image description here

Antwort

1

Das ist, weil in Ihren Beispieldaten, die jeweils sector nur eine Art von shock hat damit verbunden.

table(test.df$sector, test.df$shock) 

#    direct indirect.down indirect.up 
# Agriculture  9    0   0 
# Manufacturing  0    0   9 
# Services   0    9   0 

einige Daten Hinzufügen mehr Assoziationen zwischen sector und shock zu erstellen:

df2 <- test.df 

df2$shock[df2$shock == "indirect.down"] <- "indirect.up" 
df2$shock[df2$shock == "direct"] <- "indirect.down" 

test.df <- rbind(test.df, df2) 

table(test.df$sector, test.df$shock) 

#    direct indirect.down indirect.up 
# Agriculture  9    9   0 
# Manufacturing  0    0   18 
# Services   0    9   9 

Testen Sie Ihr Code jetzt:

library(ggplot2) 

ggplot(test.df, aes(x=sector, y=loss)) + 
geom_bar(stat = "identity", aes(fill=shock)) + 
facet_wrap(~ scenario) + coord_flip() 

enter image description here

+0

Dank Sumedh, habe ich jetzt behoben haben das Problem. –