前言
??條形圖算是很常見的數(shù)據(jù)展示圖形之一。今天我們就來說說條形圖相關(guān)的事情——繪制環(huán)狀條形圖。顧名思義,環(huán)狀條形圖就是將正常排列的條形圖繪制成圓形排列,改變一下可視化的呈現(xiàn)方式。
繪圖
??廢話不多說了,下面直接展示繪制過程,代碼如下:
library(ggplot2)
# 準(zhǔn)備數(shù)據(jù)
set.seed(21)
data <- data.frame(id=seq(1,60),
individual=paste( "Mister ", seq(1,60), sep=""),
value=sample( seq(10,100), 60, replace=T))
data$angle <- 90 - 360 * (data$id - 0.5) / nrow(data)
ggplot(data,aes(x=as.factor(id),y=value))+
geom_bar(stat="identity",fill="skyblue")+
geom_text(aes(x=id,y=value+10,label=individual,hjust=0),color="black",fontface="bold",alpha=0.7,size=2.5,angle=data$angle)+
theme_minimal()+
theme(axis.text=element_blank(),axis.title=element_blank(),panel.grid=element_blank())+
coord_polar(start=0)+
ylim(-60,120)
結(jié)果如下:

??可以看到環(huán)狀條形圖繪制起來還是挺簡(jiǎn)單的。整個(gè)繪圖過程最需要注意的地方就是添加外圍的標(biāo)簽,讓添加的標(biāo)簽跟柱子保持在一條線上。這就要根據(jù)每一個(gè)柱子極化后的旋轉(zhuǎn)角度來調(diào)整標(biāo)簽的旋轉(zhuǎn)角度。默認(rèn)情況下,標(biāo)簽文字都是水平放置,旋轉(zhuǎn)時(shí)如果給定正數(shù)角度則從坐標(biāo)0點(diǎn)逆時(shí)針旋轉(zhuǎn),負(fù)數(shù)則順時(shí)針旋轉(zhuǎn)。在極坐標(biāo)系里面,極化后的柱子從坐標(biāo)0點(diǎn)順時(shí)針旋轉(zhuǎn)排列。對(duì)于添加標(biāo)簽的細(xì)節(jié),這里拿下圖中的Mister1條目來說明一下,該條目的柱子在極坐標(biāo)系的偏移角度為6(360/60),而標(biāo)簽需要旋轉(zhuǎn)的角度就是84(90-6)。

??大部分人應(yīng)該會(huì)覺得上面第一張圖左半邊的標(biāo)簽都是底朝上,不符合我們的閱讀習(xí)慣,看起來很別扭,那該如何調(diào)整呢?看下面的代碼:
# 準(zhǔn)備數(shù)據(jù)
set.seed(21)
data <- data.frame(id=seq(1,60),
individual=paste( "Mister ", seq(1,60), sep=""),
value=sample( seq(10,100), 60, replace=T))
angle <- 90 - 360 * (data$id - 0.5) / nrow(data)
data$hjust <- ifelse(angle < -90, 1, 0)
data$angle <- ifelse(angle < -90, angle+180, angle)
ggplot(data,aes(x=as.factor(id),y=value))+
geom_bar(stat="identity",fill="skyblue")+
geom_text(aes(x=id,y=value+10,label=individual,hjust=hjust),color="black",fontface="bold",alpha=0.7,size=2.5,angle=data$angle)+
theme_minimal()+
theme(axis.text=element_blank(),axis.title=element_blank(),panel.grid=element_blank())+
coord_polar(start=0)+
ylim(-60,120)
結(jié)果如下:

結(jié)束語
??今天說的比較基礎(chǔ)的環(huán)狀條形圖,后面再介紹一下復(fù)雜一些的環(huán)狀條形圖,如繪制分組堆疊的環(huán)狀條形圖。哦了,今天到此結(jié)束~~~