lecture
website icon
統計繪圖
簡介 直方圖 密度圖 長條圖 折線圖 圓餅圖 散布圖 箱型圖 雷達圖 動畫
×
website icon 資料管理 統計分析 相關資源 巨人肩膀 語法索引 關於作者

簡介

本部分介紹圓餅圖,使用到的指令包含:

Facebook Icon Twitter Icon LinkedIn Icon LINE Icon

圓餅圖是常見的統計圖之一,用途是顯示各類別的百分比,有著與直條圖相似的用途。由於人在視覺上對高低的敏感度大於角度與弧度,所以有人主張應該盡量以長條圖取代圓餅圖。儘管如此,圓餅圖仍然是廣泛使用的一種統計圖表。

圓餅圖

pie()是R Base繪製圓餅圖的指令,pie()可以很快速產出圓餅圖,最大的挑戰不是圓餅圖本身,而是如何製造含有百分比的圖例。我們以ggplot2現成的鑽石diamonds資料檔作為範例,示範如何在R畫出圓餅圖。

首先要先用table()計算鑽石切工cut的次數分配與百分比,用round()四捨五入取到小數第二位。接著再用paste()製作圖例後將圖例指定給pie()就大功告成。

> library(ggplot2)
> data(diamonds)
> attach(diamonds)
> level<-names(table(cut))
> count<-as.integer(table(cut))
> percent<-round(count/sum(count)*100,2)
> legend<-paste(level,"",percent,"%")
> pie(table(cut), labels=legend, col=c("white","aquamarine1","aquamarine2","aquamarine3", "aquamarine4"))

弔詭的是ggplot2沒有geom_pie()的指令,無法直接產出圓餅圖。ggplot2要畫出圓餅圖使用的技巧是先劃出長條圖,再用coord_polar()把長條圖轉換為極座標達到圓餅圖的效果。不過在此之前一樣要先費一番功夫計算百分比,最後再用geom_text()加上圖例。

> data<-data.frame(level, count, percent)+
> p<-ggplot(data, aes(x="", y=percent, fill=level))+
+ geom_bar(stat="identity", width=1, color="black")+
+ coord_polar("y", start=0)+
+ scale_fill_manual(values=c("white","aquamarine1","aquamarine2","aquamarine3", "aquamarine4"))+
+ geom_text(aes(label=paste(percent, "%")), position=position_stack(vjust= 0.5))+
+ theme_minimal()
> p
R Base圓餅圖 ggplot2圓餅圖

甜甜圈與玫瑰圖

甜甜圈是圓餅圖的改良版,gglopt2只要多加一行expand_limits(x=c(-1,1)),將圖形限制-1到1之間創造出窄化的長條圖,再將長條圖畫在極座標上就可以達到甜甜圈的效果。

> p<-ggplot(data, aes(x="", y=percent, fill=level))+
+ geom_bar(stat="identity", width=1, color="black")+
+ expand_limits(x=c(-1,1))+
+ coord_polar("y", start=0)+
+ scale_fill_manual(values=c("white","aquamarine1","aquamarine2","aquamarine3", "aquamarine4"))
+ geom_text(aes(label=paste(percent, "%")), position=position_stack(vjust= 0.5))+
+ theme_minimal()
> p

ggplot2玫瑰圖:

> p<-ggplot(data, aes(x=level, y=log(1+percent), fill=level))+
+ geom_bar(stat="identity")+
+ coord_polar()+
+ scale_fill_manual(values=c("aquamarine","aquamarine1","aquamarine2","aquamarine3", "aquamarine4"))+
+ geom_text(aes(label=paste(percent, "%")), position=position_stack(vjust= 0.5))+
+ theme_minimal()
> p
ggplot2甜甜圈圖 ggplot2玫瑰圖