2017-01-31 3 views
0

Ich habe den folgenden Code ein gestapeltes BarPlot in ggplotBarPlot Daten entsprechen nicht der Legende

data_age <- data.frame(age = as.factor(c("16 to 20", "21 to 24", "25 to 30", "31 to 40", "40+")), 
        total = c(740, 1092, 855, 525, 182), 
        perc_total = c(22, 32, 25, 15, 5)) 

g_age <- ggplot(data_age , aes(1, perc_total, fill = age, label = perc_total)) + 
geom_bar(stat ="identity") + 
geom_text(size = 4, position = position_stack(vjust = 0.5), colour = "black") + 
coord_flip() + 
scale_y_continuous(limits = c(0, 100)) + 
scale_x_continuous(limits = c(0, 2), breaks = 1) + 
scale_fill_manual(guide = guide_legend(title = NULL, keyheight = 0.5, keywidth = 0.5, direction = "horizontal"), values = c("#FFFFB2", "#FECC5C", "#FD8D3C", "#F03B20", "#BD0026")) + 
theme_bw() + 
theme(plot.title = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank(), 
    axis.text.x = element_blank(), axis.ticks.x = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
    legend.position="bottom") 

Which results in this barplot

Herstellung

Jedoch habe ich die Reihenfolge der Daten müssen rückgängig gemacht werden. Ich kann das

folgenden, indem Sie das erreichen
g_age_2 <- ggplot(data_age , aes(1, perc_total, fill = levels(age)[5:1], label = perc_total)) + 
    geom_bar(stat ="identity") + 
    geom_text(size = 4, position = position_stack(vjust = 0.5), colour = "black") + 
    coord_flip() + 
    scale_y_continuous(limits = c(0, 100)) + 
    scale_x_continuous(limits = c(0, 2), breaks = 1) + 
    scale_fill_manual(guide = guide_legend(title = NULL, keyheight = 0.5, keywidth = 0.5, direction = "horizontal"), values = c("#BD0026", "#F03B20", "#FD8D3C", "#FECC5C", "#FFFFB2")) + ## Inverted the colors too 
    theme_bw() + 
    theme(plot.title = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank(), 
    axis.text.x = element_blank(), axis.ticks.x = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
    legend.position="bottom") 

And this plot follows the order and the colors that I want, but the legend does not match

Wie kann ich dieses Problem lösen?

Antwort

0

Sie könnten tun:

g_age <- ggplot(data_age , aes(1, perc_total, fill = age, label = perc_total)) + 
    geom_bar(stat ="identity",position = position_stack(reverse = TRUE)) + 
    geom_text(size = 4, position = position_stack(vjust = 0.5,reverse = TRUE), colour = "black") + 
    coord_flip() + 
    scale_y_continuous(limits = c(0, 100)) + 
    scale_x_continuous(limits = c(0, 2), breaks = 1) + 
    scale_fill_manual(guide = guide_legend(title = NULL, keyheight = 0.5, keywidth = 0.5, direction = "horizontal"), 
        values = c("#FFFFB2", "#FECC5C", "#FD8D3C", "#F03B20", "#BD0026")) + 
    theme_void() + 
    theme(legend.position="bottom") 

Hinweis die Zugabe von position = position_stack(reverse = TRUE)-geom_bar() und geom_text() auch.
Ich ersetzte auch die durch theme_void(), um alles zu entfernen und nur theme() für die Einstellung der Position der Legende.

enter image description here

+0

, die perfekt funktioniert! Ich passte mich meinem ursprünglichen Code an und es funktionierte so, wie ich es vorhatte – luizgg

Verwandte Themen