2017-01-18 4 views
3

Задание аргумента fill для aes приводит к обратному кругу круговой диаграммы, поэтому перерывы/ярлыки больше не совпадают с кусочками пирога. См. Пример и итоговые графики ниже.ggplot2 coord_polar сохранить заказ при использовании заливки

df = data.frame(Var1 = letters[1:5], Var2 = c(6, 31, 34, 66, 77))  
df$Var1 = factor(df$Var1, levels = df$Var1, ordered = T) 

# just fine, but no colors 
ggplot(df, aes(x = 1, 
       y = Var2)) + 
    geom_bar(width = 1, stat = "identity") + 
    coord_polar(theta = "y") + 
    scale_fill_manual(values = c("red","green","yellow","black","white"), 
        guide_legend(title = "My_Title")) + 
    scale_y_continuous(breaks = (cumsum(df$Var2) - 
           df$Var2/2), 
        labels = df$Var1) 

# reverse order appears 
ggplot(df, aes(x = 1, 
       y = Var2, 
       fill = Var1)) + 
    geom_bar(width = 1, stat = "identity") + 
    coord_polar(theta = "y") + 
    scale_fill_manual(values = c("red","green","yellow","black","white"), 
        guide_legend(title = "My_Title")) + 
    scale_y_continuous(breaks = (cumsum(df$Var2) - 
           df$Var2/2), 
        labels = df$Var1) 

just fine reverse order

+2

См. Примечания к выпуску из [2.2.0] (https://blog.rstudio.org/2016/11/14/ggplot2-2-2-0/), раздел Stacking bars. – Haboryme

ответ

2

Stacking будет происходить в обратном порядке фактора (за v2.2.0), и, следовательно, мы можем использовать следующий код стека в исходном порядке:

ggplot(df, aes(x = 1, 
       y = Var2, 
       fill = forcats::fct_rev(Var1))) + 
    geom_bar(width = 1, stat = "identity", col = 1) + 
    coord_polar(theta = "y") + 
    scale_y_continuous(breaks = (cumsum(df$Var2) - 
            df$Var2/2), 
         labels = df$Var1) 

Также , вы можете использовать geom_col вместо geom_bar(stat = "identity").

Смежные вопросы