来源:南丁格尔玫瑰图
南丁格尔玫瑰图的本质是直条图,主要用在分类变量可视化。想像一下把直条图的x轴卷成一个圈,再把直条图之间的间隙变小,就成了漂亮的南丁格尔玫瑰图了。
1. 加载包
library(dplyr)
library(ggplot2)
2. 生成数据
set.seed(1234)
temp0=data.frame(city=LETTERS[1:26],patients=round(rnorm(26,100,20),0))
生成的数据包含两个变量,分别是city和patients。
3. 数据预处理
temp1=temp0[order(temp0$patients),]
%>% mutate(city=factor(city,levels = city), id=seq(1,26,1),label=paste0(city,sep=" ",patients))
关于mutate函数和%>%在之前的推文有介绍,有疑问的伙伴可以自行查看:
总结 | 功能强大的dplyr 包(一)(必学)
数据清洗神器之dplyr包(二)
4. 绘制直条图(geom_col与geom_bar都能绘制直条图,详见帮助文件)
p<-ggplot(temp1, aes(id,patients, fill =id,label=label)) +
geom_col(width = 1, color = 'white') +
geom_col(aes(y = I(30)), width = 1, alpha = 0.5, fill = 'white') + #这里其实是为了方便后面极坐标转换时中间挖空
geom_col(aes(y = I(15)), width = 1, alpha = 0.2, fill = 'white') +
geom_col(aes(y = I(10)), width = 1, color = 'white', fill = 'white')
p
5. 坐标轴转换与图形调整
p1 <- p+
coord_polar() + #极坐标转换,默认顺时针排序
theme_void() + #去掉背景
theme(legend.position="none")+ #去掉图例
scale_fill_gradientn(colors = c("darkgreen", "green", "orange", "red","firebrick")) #颜色填充
p1
6. 添加标签
p1 + geom_text(data = . %>% filter(between(id,18,26)),nudge_y = -13,size=2.8,color = "white") + #设置标签的文字的位置和大小
geom_text(data = . %>% filter(between(id,10,17)),nudge_y = 5,color = "black",size=2.5)+
geom_text(data = . %>% filter(between(id,1,10)),nudge_y = 7,color = "black",size=2.3)
今天的学习就到这里,希望对大家有帮助!
推荐阅读:环状直方图和散点图