我是靠谱客的博主 无奈路灯,最近开发中收集的这篇文章主要介绍R-南丁格尔玫瑰图: 仿制效果最好的疫情玫瑰图,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这是到目前为止我觉得讲解最为细致、仿制与色彩改进效果最好的疫情玫瑰图教程。所以特约稿给大家学习!作者码字不易,还请多多支持。

Angus,温州医科大学在读博士,急诊医学专业,主攻临床数据库及人工智能在危重症患者的应用。

EasyShu-张杰


大家好,我是Angus,最近人民日报的NCP疫情图引起了很多科研工作者的兴趣,应EasyShu-杰哥邀请,我给大伙讲一下如何绘制疫情玫瑰图。首先看看2020年3月12日的图片,见下面。

接下来我就带大家解析这张图,我的制图习惯是出图前先画草图,这样便于图形制作时条理清晰。

设计解析

那么接下来看一下这张图的设计,如下。

从原型图中我们可以看到,这张图的底图是bar plot,在这基础上的其他元素包括:

???? 3种label,在这里,我们不做死亡的label,只做例数和国家的;

???? 2组同心圆,其实质就是bar plot。

在label部分,我们这里涉及3种类型:

       ???? 右下角:label在barplot外 + 旋转;

       ????左下角:label在bar plot内;

       ????左上角:label在bar plot外+ 旋转 + 文本换行。

OK,现在开始干活。打开你的RStudio。我们这里要用的是tidyverse组合包,我习惯每次直接用套件,而不是单独载入ggplot2包。组合包便于我们在制图过程中,对数据直接变形。如果没有安装的,请先安装该包。

1. 载入包

判断环境,并载入包,若未安装tidyverse,会自动进行安装。

if (!requireNamespace("tidyverse", quietly = TRUE)) {
  install.packages(tidyverse)
}
library(tidyverse)

2. 准备数据

       这里我开始生成一批类似上图的数据。

       其中:

       ???? id:对应每一个国家,这里共生成26个字母国家;

  ???? height:对应NCP疫情数目;

       ???? label:bar plot的标签。

    那么label这部分,因为我们有3种类型,所以在mutate里我们分别进行操作:

  ???? 右半边:应该是×例×国,即id ∈ [1, 13]这部分;

  ???? 左下部:国家都在例数下面,所以它应该在例数和国家之间应该有个换行符,即id ∈ [14, 21]这部分;

  ???? 左上部:国家又跑到例数上面,所以我们在国家和例数之间添加换行符,即id ∈ [22, 26]这部分。

dat <-
  data.frame(id = 1:26,
             height = c(seq(100, 550, 20),
                        seq(650, 700, 20))) %>%
  mutate(
    label = case_when(
      id <= 13 ~ paste0(height, "例 ", LETTERS[id], "国"),
      id <= 21 ~ paste0(height, "例n", LETTERS[id], "国"),
      T ~ paste0(LETTERS[id], "国n", height, "例")
    )
  )


3.图表绘制

开始画底图 + 同心圆的bar plot

p1 <-
ggplot(data = dat, aes(x = id, y = height, label = label)) +
geom_col(aes(fill = id), width = 1, size = 0) +
geom_col(
aes(y = 40),
fill = "white",
width = 1,
alpha = 0.2,
size = 0
  ) +
geom_col(
aes(y = 20),
fill = "white",
width = 1,
alpha = 0.2,
size = 0
  )
p1

L7/14:我们将bar的宽度设为1,消除间隔。

L4-10:添加外部的同心圆bar plot,白色填充,同时设置alpha属性。

L11-17:添加内部的同心圆bar plot,同理操作,外部和内部的alpha设置一样大,这样一重叠,内部的实际显示就会变成0.4。

跑完后,我们就会看到下图。

这张图看起来是不是每条bar之间还有间隔线,来来来,我给你放大到2000倍。我们就会发现其实间隔线只是颜色的过渡引起的错觉。

OK,那么我们的底图就做好了,接下来就是极坐标变形了,同时添加中间的空心园。

       同时,我们去掉一些没用的背景,坐标轴等元素,图例等改bar的颜色时再进行一起去除。极坐标变形后,2个圆环的效果就很明显了。

p2 <-
p1 +
coord_polar() +
theme_void() +
scale_y_continuous(limits = c(-60, 701))
p2

接下来,我们为每一条bar添加label。

p3 <-
p2 +
geom_text(
data = . %>% filter(id <= 13),
nudge_y = 80,
angle = 95 - 180 * c(1:13) / 13,
fontface = "bold"
) +
geom_text(
data = . %>% filter(between(id, 14, 21)),
nudge_y = -55,
nudge_x = -0.1,
color = "white",
fontface = "bold"
) +
geom_text(
data = . %>% filter(id >= 22),
nudge_y = -50,
color = "white",
angle = 80 - 75 * c(1:5)/5,
fontface = "bold"
)
p3

L4/10/17:动态筛选数据。

L5/11-12/18:通过nudge_*属性来调整3种label的相对位置,实现label分别位于外面和里面。

L6/20:设置angle来根据bar的位置来动态调整label的角度,以实现旋转。

L13/20:将内部的label设置为白色勾勒,增加文字的可读性,同时对所有的label,我们都对其加粗以达到图片的效果。

       下面看看效果。

到p3这里,基本的轮廓就已经出来了,接下来就是去除legend,更改每条bar的颜色了。为什么要在这里才去除legend呢,这是因为我们一开始添加的legend是fill属性哦。

       首先原图我们上下左右各取一点颜色,加上开头就是一共5个颜色,接着就是让这5个颜色产生渐变。

       不同显示器拾色可能会有差异,我这里拾到的5个颜色分别为:

       #54778F,#4EB043,#E69D2A,#DD4714,#A61650

       OK,开始上色。

p4 <-
  p3 +
  scale_fill_gradientn(
    colors = c("#54778f", "#4EB043", "#E69D2A", "#DD4714", "#A61650"),
    guide = F
  )
p4

L4-5:载入渐变色板。

L6:删除fill图例。

这个时候就基本完成了。

       我们来对比一下:

但相比人民日报的色板,我还是更喜欢viridis的色板。见下图


如需联系EasyShu团队

请加微信:EasyCharts

微信公众号【EasyShu】博文代码集合地址

https://github.com/Easy-Shu/EasyShu-WeChat

《R语言数据可视化之美》增强版

增强版配套源代码下载地址

Github

https://github.com/Easy-Shu/Beautiful-Visualization-with-R

百度云下载

https://pan.baidu.com/s/1ZBKQCXW9TDnpM_GKRolZ0w 

提取码:jpou

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘  

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

点击阅读原文,跳转最新文章目录阅读

最后

以上就是无奈路灯为你收集整理的R-南丁格尔玫瑰图: 仿制效果最好的疫情玫瑰图的全部内容,希望文章能够帮你解决R-南丁格尔玫瑰图: 仿制效果最好的疫情玫瑰图所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部