R-南丁格尔玫瑰图: 仿制效果最好的疫情玫瑰图

article/2025/11/1 6:55:42

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

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扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

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


http://chatgpt.dhexx.cn/article/qpNZ3FL8.shtml

相关文章

教你做超惊艳的南丁格尔玫瑰图

其实早在今年初&#xff0c;疫情还很严重的时候&#xff0c;人民日报发布的这个图就吸引了广大数据分析者的注意。 今天我们就把这个图的前因后果以及怎么做一次性讲清楚。 玫瑰图的前世今生 这个图学名&#xff1a;南丁格尔玫瑰图&#xff0c;是弗罗伦斯南丁格尔女士发明的…

Python科学绘图 南丁格尔图/玫瑰图

文章目录 Github/GItee仓库地址注意生成数据乱序数据渲染图片为png或jpeg顺序数据 Github/GItee仓库地址 ScienceGallery-GithubScienceGallery-Gitee 注意 数据传入到 pyecharts 的时候&#xff0c;需要自行将数据格式转换成上述 Python 原生的数据格式。方法&#xff1a; …

南丁格尔玫瑰图 With ggplot2【R语言】

前言 之前在饼图中提到过&#xff0c;要整理一下南丁格尔玫瑰图的画法&#x1f611; 南丁格尔玫瑰图又名鸡冠花图、极坐标区域图&#xff0c;是南丁格尔在克里米亚战争期间提交的一份关于士兵死伤的报告时发明的一种图表。南丁格尔玫瑰图是在极坐标下绘制的柱状图&#xff0c;…

echarts最简单的南丁格尔玫瑰图+图例

//图标写在方法里面&#xff08;然后在mounted里展示&#xff09; getEcharts(){ var myChart document.getElementById(‘echarts’); let echarts echarts.init(myChart); var option; var legends this.getlowIncomeData_xData; //图例名字&#xff08;在这里作修改&…

python+matplotlib绘制南丁格尔玫瑰图

实验:绘制南丁格尔玫瑰图   本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~   无论如何还是感…

R语言-南丁格尔玫瑰图

简介 南丁格尔玫瑰图&#xff08;Nightingale rose chart&#xff09;即极坐标柱形图&#xff0c;是一种圆形的柱形图。由弗罗伦斯-南丁格尔所发明&#xff0c;普通柱形图的坐标系是直角坐标系&#xff0c;而南丁格尔玫瑰图的坐标系是极坐标系。南丁格尔玫瑰图是在极坐标下绘制…

Tableau——制作南丁格尔玫瑰图

一、适用场景: 需要计算总费用或金额的各个部分构成比例的情况 二、简介&#xff1a; 南丁格尔玫瑰图Nightingale rose diagram是弗罗伦斯南丁格尔所发明的&#xff0c;又名为极区图&#xff0c;是一种圆形的直方图。 如果因为组成部分较多而导致饼图分区多且密集&#xff0…

Tableau 南丁格尔玫瑰图

简介:南丁格尔玫瑰图是弗罗伦斯南丁格尔所发明的。又名为极区图。是一种圆形的直方图。 应用场景&#xff1a;可以看到比饼图更加详细地信息。 参考书目&#xff1a;跟阿达学 Tableau 数据可视化 操作步骤&#xff1a; 以示例-超市为例 1、导出相关数据&#xff08;处理数…

南丁格尔玫瑰图

1、绘制南丁格尔玫瑰图的步骤&#xff1a; 数据准备工作&#xff1a;准备好角度数值和半径数值。 建立画布&#xff0c;并将直角坐标转化为极坐标。并对极坐标进行一定的设置。 使用bar函数进行绘图。 对图形进行美化处理。 2、上代码 import numpy as np import pandas a…

❤echarts 南丁格尔玫瑰图的使用以及南丁格尔玫瑰图详细配置

❤echarts 南丁格尔玫瑰图的使用以及南丁格尔玫瑰图详细配置 1、认识 使用可以参考之前文章&#xff0c;会使用直接跳过1 引入官网的南丁格尔玫瑰图效果如下&#xff1a; 使用函数配置分为三个部分&#xff1a;初始化> 设置配置> 地图使用参数 配置代码如下 option…

【Python】数据分析:如何使用matplotlib和pyecharts制作南丁格尔玫瑰图

目录 一、介绍 二、相关库 三、数据准备 四、pyecahrts代码实现 五、matplotlib代码实现 原文作者&#xff1a;我辈理想版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上[原文超链接](https://blog.csdn.net/qq_15028721?spm1010.2135.3001.5421)、作者信息和本…

南丁格尔图(饼状)

今天来做一个南丁格尔图&#xff0c;参考官网&#xff0c;一会会把源码放上去&#xff0c;注释和详细的解释也会放在最下面供参考理解 基于VScode开发&#xff0c;我用的是子组件不是APP.vue code&#xff1a; <template> <div id"main" :style"{width…

[数据可视化] 南丁格尔玫瑰图

南丁格尔玫瑰图 南丁格尔玫瑰图又名鸡冠花图、极坐标区域图&#xff0c;是南丁格尔在克里米亚战争期间提交的一份关于士兵死伤报告时发明的一种图表&#xff0c;以表达军医院季节性的死亡率&#xff0c;从整体上来看: 这张图是用来说明并比较战地医院伤患因各种原因死亡的人数&…

数据分析软件图表详解-南丁格尔图的故事

DataViz数据可视化分析工具中的南丁格尔图也叫南丁格尔玫瑰图、鸡冠花图或极坐标区域图。是由弗洛伦斯南丁格尔发明的。南丁格尔是英国护士和统计学家&#xff0c;出生于意大利的一个英国上流社会的家庭。虽然出身贵族南丁格尔却选择了完全不同的人生道路&#xff0c;选择了当时…

网络层协议和数据链路层协议

1. IP 协议 IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。IP位于TCP/IP模型的网络层(相当于OSI模型的网络层)&#xff0c;它可以向传输层提供各种协议的信息&#xff0c;例如TCP、UDP等&#xff1b;对下可将IP信息包放到链路层…

数据链路层协议(1)

目录 1.获取IP地址 2.打开浏览器&#xff0c;在浏览器中的地址栏上输入需要访问的服务器的URL&#xff08;资源定位符&#xff09; 3.网关路由收到DNS请求报文后&#xff0c;将先查看数据帧的二层封装&#xff0c;确认该数据帧是给自己的&#xff0c;则将解二层封装看三层封…

【网络】-- 数据链路层

应用层&#xff08;http、https&#xff09;&#xff1a; 数据的使用。传输层&#xff08;UDP、TCP&#xff09;&#xff1a;网络通讯的细节&#xff0c;将数据可靠的从A主机跨网络送到B主机。网络层&#xff08;IP&#xff09;&#xff1a;提供一种能力&#xff0c;将数据从A主…

数据链路层重点协议

目录 1.以太网 2.MTU 3.ARP与RARP协议 1.以太网 1.1 概念 "以太网" 不是一种具体的网络&#xff0c;而是一种技术标准&#xff1b;既包含了数据链路层的内容&#xff0c;也包含了 一些物理层的内容。例如&#xff1a;规定了网络拓扑结构&#xff0c;访问控制方式…

计算机网络基础知识--数据链路层协议

目录 使用点对点信道的数据链路层 数据链路层的三个基本问题 封装成帧 透明传输 差错检测 点对点协议PPP PPP协议的组成 PPP帧的格式 数据链路层的协议数据单元是帧。数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把接收到的帧中的数据取出并上交网…

数据链路层之以太网协议

在 IP 数据包交付的过程中&#xff0c;在数据链路层会对数据包进行添加报头信息。以太网协议就是数据链路层的一个重要协议。这样说其实不太准确&#xff0c;因为以太网协议是一个规定数据链路层及物理层的协议&#xff0c;不能说它是数据链路层的一个协议。 以太网帧 以太网…