南丁格尔玫瑰图

来源:南丁格尔玫瑰图

南丁格尔玫瑰图的本质是直条图,主要用在分类变量可视化。想像一下把直条图的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)

今天的学习就到这里,希望对大家有帮助!

推荐阅读:环状直方图和散点图

你可能感兴趣的:(南丁格尔玫瑰图)