前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >“疫”外收获-nCov2019全球疫情之南丁格尔玫瑰图

“疫”外收获-nCov2019全球疫情之南丁格尔玫瑰图

作者头像
黑妹的小屋
发布2020-08-06 14:57:50
1.7K0
发布2020-08-06 14:57:50
举报
文章被收录于专栏:菜鸟学数据分析之R语言

就是我的

"疫”外收获

来源:人民日报新媒体

最近看到人民日报新媒体公布的疫情相关的图特别漂亮,想着利用疫情的数据学着画一画,R语言爬虫弱爆的我,只能想着站在“巨人的肩膀”学习,正巧Y叔更新公众号信息,Y叔竟然写了一个nCov2019的R语言包,简直太厉害了!nCov2019包的安装需要依靠remotes包,同时也要注意RStudio的版本是否适合,否则可能安装失败。

01

安装包

>install.packages("remotes”)

>library(remotes)

>remotes::install_github("GuangchuangYu/nCov2019”)

02

获取数据

在王珊、萨师煊编著的数据库系统概论中提到“三分技术、七分管理,十二分基础数据”,在《星际迷航》中,Krik船长说“数据是一件麻烦事,一件非常非常麻烦的事”,的确,为了获取,一波好几折,比如获取前需要安装affy包与simpleaffy包,为了获取affy包,biocLite()或install.packages(“affy”),系统友好的告知“package ‘affy’ is not available (for R version 3.6.3)”,好吧,为了解affy包的适用版本,咱进入Bioconductor官网http://www.bioconductor.org/packages/2.13/bioc/html/affy.html看看affy的installation,根据提示操作,当前的RStudio版本已经不适合the lastest of Bioconductor,Bioconductor version 10.0适用于RStudio 3.6.0,而Bioconductor version 11.0匹配RStudio 4.0.0,而我当前操作的RStudio 版本是3.6.3,此刻内心OverlappingSound,packages和RStudio更新换代速度要不要那么快?此刻已经记不起哪位大师说“In my own work,as much as 60% of the time I spend on data analysis is focused on Preparing the data for analysis”,好啦,在“龟速”网络下运行的RStudio终于成功的获取了疫情的数据(更新至于2020.04.15)。代码如下:

>if(!requireNamespace("BiocManager", quietly = TRUE))

+install.packages("BiocManager”)

>BiocManager::install(version = "3.10”)

>library(BiocManager)

>BiocManager::install("affy”)

>BiocManager::install(“simpleaffy”)

>library(nCov2019)

> data<-load_nCov2019(lang = "en")

>World<-data["global"]

>today<-subset(World,time=="2020-04-15")

>todaycountry),paste(todaycountry,"(死亡",today

> library(dplyr)

>today_gb1<today%>%group_by(cum_confirm)%>%summarise(country=paste(country,collapse=","))

#其中的paste()函数是用来表示连接字符串,summarise()是指将多个值简单化为单个值,%>%是指管道操作函数,来自dplyr包,对于这个的理解,可以想象成车间的流水线,只有前面一道程序完成之后才能进入下一道程序,将前面的参数的结果直接传递给下一个函数,在R语言爬虫中会经常用到。today_gb1其实就相当于我们在excel中将today这个一维数据列表根据cum_confirm列的数据信息转变为二维数据列表,这个二维数据是将cum_confirm中数值一样的country进行汇总。这个关于每个函数如何使用,在RStudio中可以采用help()或??函数得到解决。

>today_gb2<today%>%group_by(cum_confirm)%>%summarise(country_dead=paste(country_dead,collapse=","))

>today_gb3<-today%>%group_by(cum_confirm)%>%summarise(cum_dead=paste(cum_dead,collapse=","))

>today_gb4<merge(today_gb1,today_gb2)#这一步相当于将Excel中的两个表格合并,作用是合并数据帧。

>today_g5<merge(today_g4,today_g3)#别问为什么不直接将today_gb1、today_gb2、today_gb3合并,而要通过today_gb4,这是因为merge()只能合并两个,不能合并3个。

>today_gb5<as.data.frame(today_gb5)#这是检查today_gb5中的对象是否是数据帧,倘若不是,在可能的情况下强制它

>today_gb5<arrange(today_gb5,desc(cum_confirm))#这是通过arranger()排序函数对today_g5中数据根据cum_confirm做降序排列

>View(today_gb5)#通过查看today_gb5的数据,数据总共有174个,为了减少处理数据的工作量,选择第1-41个数据进行处理。

>today_top<-today_gb5[1:41,]

>today_top

>a<-data.frame(cum_confirm=3573,country = "低于95例的国家",country_dead = "",cum_dead = "",angle="")

>today_top<-rbind(today_top,a)#增加一行a

>today_top$angle<-1:42*360/42#在today_g5中添加一列扇形角度angle,一个圆360度,将每个角度分成42份

03

画图

>ggplot(today_top,aes(x = country, y =cum_confirm,fill=country))+geom_bar(stat="identity",position="stack",width=1)+geom_bar(aes(y=I(2)),stat="identity",width=1,fill="white")+geom_bar(aes(y=I(4)),stat="identity",width=1,fill = "white",alpha=0.2)+ geom_bar(aes(y =

I(6)),stat="identity",width=1,fill="white",alpha=0.1)+scale_y_log10()+coord_polar(direction=-1)+theme_void()+theme(legend.position="none")+geom_text(aes(label=paste(country,paste(cum_confirm,"例",sep = ""),sep = "\n"),y = cum_confirm*.8, angle = angle),data = today_top[1:5,],color="white",fontface ="bold",vjust=1,family= "STKaiti",size =2.2)+geom_text(aes(label=paste("死亡",cum_dead,"例",sep=""),y= cum_confirm*.4, angle = angle),data = today_top[1:5,],color="white",fontface ="bold",vjust=1,family= "STKaiti",size = 1.5)+geom_text(aes(label = country, y=cum_confirm*.8),data= today_top[6:20,],color="white",vjust =seq(0.4,0,length.out=15),hjust=seq(0.2,0.5,length.out=15),fontface="bold", family="STKaiti",size=c(2.2,1,seq(2.2,1,length.out=13)))+geom_text(aes(label = paste(cum_confirm,"例",sep = ""), y=cum_confirm*c(seq(.55,.45,length.out=6),seq(.47,.65,length.out= 9))),data =today_top[6:20,],color= "white",vjust = seq(0.5,0,length.out =15),hjust = seq(0,0.5,length.out = 15),fontface = "bold",family="STKaiti",size=seq(1.9,1.5,length.out=15))+geom_text(aes(label = paste("死亡",cum_dead,"例",sep = ""),y=cum_confirm*c(seq(.35,.21,length.out=6),seq(.22,.45,length.out=9))),data=today_top[6:20,],color="white",vjust = seq(0.4,0,length.out = 15),hjust =seq(0.2,0.5,length.out = 15),fontface = "bold", family = "STKaiti",size = 1.2)+geom_text(aes(label=paste(paste(cum_confirm,"例",sep= ""),country_dead,sep=" "),y = cum_confirm*1.1,angle=angle+90),data=today_top[21:40,],color=black",vjust =0, hjust=0,fontface = "bold", family =STKaiti",size=1.5)+geom_text(aes(label=country,y= cum_confirm*1.1,angle = angle+90),data today_top[41,],color = "black",vjust = 0, hjust = 0,fontface = "bold",family = "STKaiti",size = 1.5)

04

图片导出

用RStudio的Export直接导出的PNG、SVG、JPEG、TIFF等格式的图片像素低,低到无法看到图中的文字信息,用pdf格式导出的图片,图片像素没问题,但图片文字全部消失不见。为解决图片清晰度低的问题,采用Cairo包能够创建高质量矢量图,同时支持高质量图形渲染的特点,将ggplot绘制的图片储存成为pdf格式,同时借助showtext包中的showtext_begin函数和showtext_end()函数,使得保存的图片中包含中文字符。尽管代码运行,发现Cairo能够安装成功,但是library加载时却失败,倘若盆友知道原因,可以留言告知,谢谢!

>install.packages(“Cairo”)

>Install.packages(“showtext”)

>library(Cairo)

错误: package or namespace load failed for ‘Cairo’:

loadNamespace()算'Cairo'时.onLoad失败了,详细内容:

调用: dyn.load(file, DLLpath = DLLpath, ...)

错误: 无法载入共享目标对象‘/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Cairo/libs/Cairo.so’::dlopen(/Library/Frameworks/R.framework/Versions/3.6/Resources/library/Cairo/libs/Cairo.so, 6): Library not loaded: /opt/X11/lib/libfreetype.6.dylib,Referenced from: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/Cairo/libs/Cairo.so

Reason: image not found

‍‍‍‍

‍‍

手工安装Cairo包的方法,http://www.rforge.net/Cairo/files/

通过官网下载匹配电脑和RStudio版本的Cairo包,试图通过RStudio的Tools手工安装,但是始终无法安装至于System library,具体原因有待深究.....尽管,安装Cairo包失败,但仍想附上使用代码,万一哪天就成功了呢?

>CairoPDF(file=“plot.pdf”,width=6,height=7)

>ggplot(…..)#绘制图形

>showtext_end()

>dev.off()#关闭设备

最终,图片导出的方式采用的是Export的png和pdf格式,png格式导出的图片像素不高,在用ps提高像素后,基本能解决问题。于是尝试利用pdf导出,通过手工添加文字也OK,就是效率不高。此次代码运行的南丁格尔玫瑰图是通过学习张杰编著的《R语言数据可视化之美专业图表绘制指南》代码绘制,尽管图的外观和人民日报的图差别有点大,特别是图中数据显示(采用四舍五入法)、扇形角度、geom_bar()的系列参数的差别。通过调节ggplot2中的参数可以提高南丁格尔玫瑰图的美观。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟学数据分析之R语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档