2017-01-31 16 views
0

に対応していない私は、データの順序逆転されることを必要とするがggplotbarplotデータ凡例

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

に積層barplotの製造以下のコードを有します。私はこの問題を解決するにはどうすればよい

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

を以下のようにして、それを達成することができますか?

答えて

0

あなたは行うことができます:

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") 

は、同様にgeom_bar()へとgeom_text()からposition = position_stack(reverse = TRUE)のほかに注意してください。
themetheme_void()に置き換えてすべてを削除し、凡例の位置を設定するにはtheme()としてください。

enter image description here

+0

これは完全に機能します。私は自分のオリジナルのコードに適応し、意図した通りに働いた – luizgg