【R语言 南丁格尔玫瑰图绘制】

继续上一篇地理信息可视化讲起,为了能够更加直观的展示数据分布情况,发现之前人民日报客户端曾经做过一张关于疫情分布的玫瑰图,非常惊艳,故尝试用当前爬取的数据进行绘制。

绘图前数据整理

现存数据中不少地区病例已经清零,故在绘图中剔除为0的地区,由于弯弯的数据太过于扎眼,和大陆地区差异巨大,直接用原始数据绘图可视化较差,故对原始数据进行了相应调整。

library(ggplot2)
library(RColorBrewer)
library(dplyr)
###绘图数据处理###
mydata[,c(1,3)]%>%arrange(confirm)->mgdata
mgdata<-filter(mgdata,confirm!=0)##剔除现存本土确诊病例为0的省份##
c(mgdata$confirm[1:20]*10,mgdata$confirm[21:22])->mgdata$num##因数据范围差距较大,对其进行转换##
seq(1,length(mgdata$id_area))->mgdata$id
mm<-data.frame()
for(i in 1:length(mgdata$id_area)){
  if(mgdata$id[i]<=10){
    mm[i,1]<-paste0(mgdata$confirm[i],"例 ",mgdata$id_area[i])
  }else if(mgdata$id[i]>10&mgdata$id[i]<=18){
    mm[i,1]<-paste0(mgdata$confirm[i],"例\n",mgdata$id_area[i])
  }else{
    mm[i,1]<-paste0(mgdata$id_area[i],"\n",mgdata$confirm[i],"例")
  }
}##生成图标文本标签##
mm$V1->mgdata$label

在对图形添加文本标签时发现角度较难掌握,一个一个添加较为繁琐,故编写了角度生成函数ggangel,可以根据柱状图数量生成文本标签角度(有需要的小伙伴可以拿去用哦~)。

ggangel<-function(x){
kk<-as.numeric()
for(i in 1:x){
  j<-360/(2*x)
  kk[i]<-j+(i-1)*j*2
}
return(kk)
}
绘制玫瑰图
###绘制南丁格尔玫瑰图###
colourful<-colorRampPalette(brewer.pal(5,"Spectral"))(22)##提取想要填充的颜色##
colourful = c("#54778f", "#4EB043", "#E69D2A", "#DD4714", "#A61650")##推荐色号##
ggplot(mgdata,aes(x=id,y=num,label=label))+geom_col(aes(fill=id),width = 1.1,size=0,show.legend = F)+scale_y_log10()+geom_col(aes(y=log10(8)),fill="white",width = 1.1,alpha=0.2,size=0)+geom_col(aes(y=log10(2)),fill="white",width = 1.1,alpha=0.2,size=0)+coord_polar()+theme_void()+scale_fill_gradientn(colors = colourful)->p
p+geom_text(data=filter(mgdata,id<=10),size=2,nudge_y = 0.8,fontface="bold",angle=90-ggangel(22)[1:10])+geom_text(data=filter(mgdata,id<=23&id>18),size=2,nudge_y = -0.5,fontface="bold",angle=360-ggangel(22)[19:22],color="white")+geom_text(data=filter(mgdata,id>10&id<=18),size=2,nudge_y=-0.5,fontface="bold",color="white")##依据标签位置类别逐类添加文本标签##
ggsave("f://data//Books//rosemap.jpg")##存图##
结果如下

南丁格尔玫瑰图

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值