2017-08-13 255 views
1

我有一個數據框,並希望在一個特定的列上創建一個餅圖,指出此列中每個級別的百分比。如何使用ggplot2創建包含百分比標籤的餅圖?

data <- data.frame(a=c("a1","a1","a2","a3","a1","a2","a3","a4","a2","a1","a5","a4","a3"), 
        b=1:13) 

換句話說,我希望有一個餅圖,表明A1的產生比例,A2,...

此外,我需要在圖表上顯示的百分比。我怎樣才能完成這一切只有ggplot2包?

任何小小的幫助將不勝感激!

+1

您可以檢查[這裏](https://開頭stackov erlot.com/questions/35682703/display-percentage-values-on-a-pie-chart) – akrun

+0

我沒有確切的值列,應該在geom_bar中使用aes(y = .. count ..)計算它,並且這個問題導致問題 – far

回答

3

嘗試以下操作:

library(dplyr) 
library(ggplot2) 
data <- data.frame(a=c("a1","a1","a2","a3","a1","a2","a3","a4","a2","a1","a5","a4","a3"),b=1:13) 
data <- data %>% 
    group_by(a) %>% 
    count() %>% 
    ungroup() %>% 
    mutate(per=`n`/sum(`n`)) %>% 
    arrange(per) 
data$label <- scales::percent(data$per) 
ggplot(data=data)+ 
    geom_bar(aes(x="", y=per, fill=a), stat="identity", width = 1)+ 
    coord_polar("y", start=0)+ 
    theme_void()+ 
    geom_text(aes(x=1, y = cumsum(per) - per/2, label=label)) 

enter image description here

我還包括餅圖的另一個版本,翻轉圓形切片和標籤的順序(如果這是你的意思):

ggplot(data=data)+ 
    geom_bar(aes(x="", y=per, fill=a), stat="identity", width = 1)+ 
    coord_polar("y", start=0, direction = -1)+ 
    theme_void()+ 
    geom_text(aes(x=1, y = cumsum(per) - per/2, label=label)) 

enter image description here

+0

,但是有錯誤,標籤(百分數)沒有完全出現在他們應該的區域上,標籤a1在a2區域 – far

+0

您沒有意義,請檢查我計算的頻率表在你的數據集上。標籤對應的相對頻率:a1 = 4(0.308)... –

+0

檢查編輯,也許這就是你正在尋找的... –