前言
条形图算是很常见的数据展示图形之一。今天我们就来说说条形图相关的事情——绘制环状条形图。顾名思义,环状条形图就是将正常排列的条形图绘制成圆形排列,改变一下可视化的呈现方式。
绘图
废话不多说了,下面直接展示绘制过程,代码如下:
library(ggplot2)
# 准备数据
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)
结果如下:
可以看到环状条形图绘制起来还是挺简单的。整个绘图过程最需要注意的地方就是添加外围的标签,让添加的标签跟柱子保持在一条线上。这就要根据每一个柱子极化后的旋转角度来调整标签的旋转角度。默认情况下,标签文字都是水平放置,旋转时如果给定正数角度则从坐标0点逆时针旋转,负数则顺时针旋转。在极坐标系里面,极化后的柱子从坐标0点顺时针旋转排列。对于添加标签的细节,这里拿下图中的Mister1
条目来说明一下,该条目的柱子在极坐标系的偏移角度为6(360/60),而标签需要旋转的角度就是84(90-6)。
大部分人应该会觉得上面第一张图左半边的标签都是底朝上,不符合我们的阅读习惯,看起来很别扭,那该如何调整呢?看下面的代码:
# 准备数据
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)
结果如下:
结束语
今天说的比较基础的环状条形图,后面再介绍一下复杂一些的环状条形图,如绘制分组堆叠的环状条形图。哦了,今天到此结束~~~
网友评论