2017-12-12 12 views
1

私はデータフレームとggplotを使って円グラフを生成しています。ggplot2 - 凡例で注釈を取得

df <- data.frame(Make=c('toyota','toyota','honda','honda','jeep','jeep','jeep','accura','accura'), 
       Model=c('camry','corolla','city','accord','compass', 'wrangler','renegade','x1', 'x3'), 
       Cnt=c(10, 4, 8, 13, 3, 5, 1, 2, 1)) 
row_threshold = 2 
dfc <- df %>% 
    group_by(Make) %>% 
    summarise(volume = sum(Cnt)) %>% 
    mutate(share=volume/sum(volume)*100.0) %>% 
    arrange(desc(volume)) 


dfc$Make <- factor(dfc$Make, levels = rev(as.character(dfc$Make))) 
pie <- ggplot(dfc[1:10, ], aes("", share, fill = Make)) + 
    geom_bar(width = 1, size = 1, color = "white", stat = "identity") + 
    coord_polar("y") + 
    geom_text(aes(label = paste0(round(share), "%")), 
      position = position_stack(vjust = 0.5)) + 
    labs(x = NULL, y = NULL, fill = NULL, 
     title = "Market Share") + 
    guides(fill = guide_legend(reverse = TRUE)) + 
    theme_classic() + 
    theme(axis.line = element_blank(), 
     axis.text = element_blank(), 
     axis.ticks = element_blank(), 
     plot.title = element_text(hjust = 0.5, color = "#666666")) + 
    scale_color_brewer(palette = "Paired") 

これは以下のように私に円グラフを与える - どのように私はこれがbreaksを添加することによって達成することができるだけではなく、honda

enter image description here

答えて

2

honda (45%)のようなMakeラベルとともに%のシェアを追加すると、 labelsscale_fill_brewer

まず、Makefillにマッピングし、使用する色を制御するには、fill_scaleを使用する必要があります。カスタム凡例のエントリを提供する場合breaksで伝説に存在するキーとlabelsで新しい名前を定義第二:ラベルを追加しました

library(ggplot2) 


ggplot(dfc[1:10, ], aes("", share, fill = Make)) + 
    geom_bar(width = 1, size = 1, color = "white", stat = "identity") + 
    coord_polar("y") + 
    geom_text(aes(label = paste0(round(share), "%")), 
      position = position_stack(vjust = 0.5)) + 
    labs(x = NULL, y = NULL, fill = NULL, 
     title = "Market Share") + 
    guides(fill = guide_legend(reverse = TRUE)) + 
    theme_classic() + 
    theme(axis.line = element_blank(), 
     axis.text = element_blank(), 
     axis.ticks = element_blank(), 
     plot.title = element_text(hjust = 0.5, color = "#666666")) + 
    scale_fill_brewer(palette = "Paired", 
        labels = rev(paste0(dfc$Make, " (", round(dfc$share), "%)")), 
        breaks = rev(dfc$Make)) 

enter image description here

+0

を、しかし、ラベルの順序が逆転しています。 – user3206440

+1

@ user3206440最も簡単な解決策は 'labels'と' breaks'引数の両方に 'rev'を追加することです。 'breaks'で指定された要素の順序は、凡例キーのエントリの順序を決定します。 'labels'引数はbreaks引数と一致する必要があります。 – missuse