您好,登錄后才能下訂單哦!
這篇文章主要介紹如何使用ggplot2繪制餅圖pie,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
繪制餅圖的過程中,利用ggplot2的geom_bar結合coord_polar實現,需要理解的點是餅圖的排布是按照aes(fill)的因子順序確定的。譬如數據如下
> dat type Num 1 A 90 2 B 34 3 C 56 4 D 99 5 E 15
必須根據數據先確定mapping 中aes(fill)的因子順序,譬如這里會按照dat$type 填充,這種非有序因子會基于字母順序來默認其填充順序。
為了確定數據填充的先后,同時方便在不同區域上填寫上對應數據的大小,所以會先去創建有序因子,從而使數據列dat$Num的自然順序和因子的順序在一定程度上一致(一致的同向對應或反向對應)。譬如如下使方向一致:
dat$type=factor(dat$type,levels = dat$type,order=T) dat$type
有序因子的結果則如下,和dat$Num的順序能夠一致上,不會出現對應錯亂問題
[1] A B C D E Levels: A < B < C < D < E
畫圖:
p_pie=ggplot(dat,aes(x="",y=dat[,2],fill=dat[,1]))+ geom_bar(stat="identity",width=1)+ coord_polar(theta="y",direction=1)+ scale_fill_brewer(palette ="Set3",direction = 1)+ labs(x="",y="",fill="Type")+ ggtitle(label ="test",subtitle=NULL) p_pie
結合下圖結果可以看出坐標軸方向使順時針,而顏色設置scale_fill_brewer(palette ="Set3",direction = 1) 設定了第一個顏色填充到第一個因子對應的“A”上,這樣就反映出在圖片實際分布中數據和因子是反向對應的。雖然在dat數據框中設置是順序一致方向相同的對應,但圖片分布中會改變。
結合圖片中反向對應的關系,在A區塊上填充上對應的文字Num:90,它的坐標因該是 sum(dat$Num)-90 +90/2,如果是B區塊對應的應該坐標為sum(dat$Num)-90-34 +34/2
歸納為sum(dat$Num)-cumsum(dat$Num)+dat$Num/2
sum(dat$Num)-cumsum(dat$Num)+dat$Num/2 [1] 249.0 187.0 142.0 64.5 7.5
結合geom_text(aes(x,y))的位置設置,保證中間文字填寫不會出錯
p_pie=p_pie+ geom_text(aes(x=1.2,y=sum(dat$Num)-cumsum(dat$Num)+dat$Num/2 ,label=as.character(dat[,2])),size=3) p_pie
##########################如果最初構建有序因子的方向和實際數據的方向反向對應呢?
dat$type=factor(dat$type,levels = rev(dat$type),order=T) dat$type p_pie=ggplot(dat,aes(x="",y=dat[,2],fill=dat[,1]))+ geom_bar(stat="identity",width=1)+ coord_polar(theta="y",direction=1)+ scale_fill_brewer(palette ="Set3",direction = 1)+ labs(x="",y="",fill="Type")+ ggtitle(label ="test",subtitle=NULL) p_pie
結合圖片可以知道,第一個因子”E“對應了第一個顏色,不過可以看到,圖片顯示坐標中,"A"在前,而"A"在dat$Num中對應的數據也在前 90,這樣計算位置就會發生改變了,90-90/2,”B”將對應90+34-34/2
歸納為cumsum(dat$Num)-dat$Num/2
cumsum(dat$Num)-dat$Num/2 [1] 45.0 107.0 152.0 229.5 286.5
而且圖例也是反向的,需要結合guides(fill=guide_legend(reverse=T)) 并且希望第一個顏色對應最后一個因子“A",scale_fill_brewer(palette ="Set3",direction = -1)
dat$type=factor(dat$type,levels = rev(dat$type),order=T) dat$type p_pie=ggplot(dat,aes(x="",y=dat[,2],fill=dat[,1]))+ geom_bar(stat="identity",width=1)+ coord_polar(theta="y",direction=1)+ scale_fill_brewer(palette ="Set3",direction = -1)+ labs(x="",y="",fill="Type")+ ggtitle(label ="test",subtitle=NULL)+ guides(fill=guide_legend(reverse = T))+ geom_text(aes(x=1.2,y=cumsum(dat$Num)-dat$Num/2 ,label=as.character(dat[,2])),size=3) p_pie
以上是“如何使用ggplot2繪制餅圖pie”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。