惊人!截至6月10日全球COVID-19疫情玫瑰图,这些国家最危险

news2024/11/17 17:54:48

一、引言

自从COVID-19疫情在2020年爆发以来,数据可视化成为了了解疫情趋势和规模的重要手段。饱受争议的疫情数据可视化中的南丁格尔玫瑰图(Rose Chart),由于具有简洁、直观、易于理解等特点,逐渐成为了一个备受欢迎的数据可视化方式。

本文的目的是探讨如何使用南丁格尔玫瑰图来呈现COVID-19疫情数据,并介绍其基本原理和应用方法。通过本文,您将能了解如何绘制一个真实还原的COVID-19疫情玫瑰图,以及如何评估和选择适合的玫瑰图参数。此外,本文还将分析疫情玫瑰图的局限性和可能的出路,以及未来的发展方向。

二、什么是南丁格尔玫瑰图

2.1 定义和基本原理

南丁格尔玫瑰图是一种可以将数据按照分类分组并展现为平面角度的可视化方式,由英国护士和统计学家南丁格尔在19世纪60年代发明。在玫瑰图中,圆圈代表了整体,而每个扇形代表了一个分类变量。扇形的半径根据数据值而变化,通常采用不同的颜色或者角度来区分不同的类别。南丁格尔玫瑰图的本质是将多个条形图通过旋转而组合在一起组成一个圆形图。玫瑰图最常用的形式是展示一个周期内不同类别中数值的比例。

2.2 用途和优点

南丁格尔玫瑰图主要用于对多个分类数据进行可视化展示,并比较它们之间的比例关系。在近年来的数据可视化中,南丁格尔玫瑰图被广泛应用于展现疫情和其他方面的数据,比如营销数据分析、疾病分析、投票结果分布等。

相较于其他图表,南丁格尔玫瑰图具有以下几个优点:

  • 直观性:玫瑰图的展示形式直观易懂,适合用于展示相对比例关系。
  • 可比性:各扇形与总圆通常是同等的,人们可以自由地比较不同的类别。
  • 可读性:数据值用大小来表示,颜色用来加强类别记忆。
  • 易于制作:制作起来相对简单,常见的数据可视化软件均支持制作南丁格尔玫瑰图。

在下一部分,本文将介绍如何使用南丁格尔玫瑰图来展示COVID-19疫情数据。

三、数据集

3.1 获取确诊和死亡数据

# install.packages("readr")
library(readr)
# install.packages("tidyr")
library(tidyr)
confirmed_cases_url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
confirmed_cases_df <- read.csv(confirmed_cases_url) # 读取全球每日确诊数据

deaths_url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv"
deaths_df <- read.csv(deaths_url) # 读取全球每日死亡数据

3.2 数据清洗和预处理

  1. 长格式转换
confirmed_cases_df <- confirmed_cases_df %>% 
  select(-c("Province.State""Lat""Long")) %>%
  gather(key = "date", value = "confirmed_cases", -c("Country.Region"))
head(confirmed_cases_df)

deaths_df <- deaths_df %>% 
  select(-c("Province.State""Lat""Long")) %>%
  gather(key = "date", value = "deaths", -c("Country.Region"))
head(deaths_df)

数据展示:

 Country.Region     date confirmed_cases
1    Afghanistan X1.22.20               0
2        Albania X1.22.20               0
3        Algeria X1.22.20               0
4        Andorra X1.22.20               0
5         Angola X1.22.20               0
6     Antarctica X1.22.20               0


  Country.Region     date deaths
1    Afghanistan X1.22.20      0
2        Albania X1.22.20      0
3        Algeria X1.22.20      0
4        Andorra X1.22.20      0
5         Angola X1.22.20      0
6     Antarctica X1.22.20      0

  1. 数据的聚合
# 去除重复项目,方便整合
confirmed_cases_df <- confirmed_cases_df[!duplicated(confirmed_cases_df[c("Country.Region""date")]),]
deaths_df <- deaths_df[!duplicated(deaths_df[c("Country.Region""date")]),]

# 汇总数据集
combined_data <- confirmed_cases_df %>% 
  left_join(deaths_df, by = c("Country.Region""date")) 

head(combined_data)

结果展示:

  Country.Region     date confirmed_cases deaths
1    Afghanistan X1.22.20               0      0
2        Albania X1.22.20               0      0
3        Algeria X1.22.20               0      0
4        Andorra X1.22.20               0      0
5         Angola X1.22.20               0      0
6     Antarctica X1.22.20               0      0
  1. 计算世界各国2020-07-28日的确诊人数和死亡人数
data <- combined_data %>%
  filter(date == "X7.28.20") %>%
  group_by(Country.Region)  %>%
  summarise(confirmed_cases = sum(confirmed_cases, na.rm = TRUE),
            deaths = sum(deaths, na.rm = TRUE))
            
data

结果展示:

# A tibble: 201 × 3
   Country.Region      confirmed_cases deaths
   <chr>                         <int>  <int>
 1 Afghanistan                   36454   1274
 2 Albania                        4997    148
 3 Algeria                       28615   1174
 4 Andorra                         907     52
 5 Angola                         1000     47
 6 Antarctica                        0      0
 7 Antigua and Barbuda              86      3
 8 Argentina                    173355   3179
 9 Armenia                       37629    719
10 Australia                       113      3
# ℹ 191 more rows
# ℹ Use `print(n = ...)` to see more rows

  1. 过滤出确诊前26名国家
# 按确诊人数排序
data <- arrange(data, desc(confirmed_cases))
data_sever <- slice(data, 1:26)
data_mild <- slice(data, 27:nrow(data))

  1. 生成label参数
# 追加id
data_sever <- data_sever %>%
  mutate(id = 1:nrow(data_sever))
  
dat <- data_sever %>%
  mutate(
    label = case_when(
      id <= 5  ~ paste0(Country.Region, "国\n", confirmed_cases, "例"),
      id <= 13 ~ paste0(confirmed_cases, "例\n", Country.Region, "国"),
      T ~ paste0(confirmed_cases, "例 ", Country.Region, "国")
    )
  )
  
# 逆向排序
dat <- arrange(dat,confirmed_cases)
dat <- select(dat, -id)
dat <- dat %>%
  mutate(id = 1:nrow(dat))
  
# 直接画图,比例差距大的离谱,适当的缩放比例

四、开始画图

  1. 画出底图
# 由于比例差距太大了,做了一次开方,适当缩小比例差距
dat$sqrt <- sqrt(dat$confirmed_cases)
p1 <- ggplot(data = dat, aes(x = id, y=confirmed_cases,        
    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


  1. 极坐标化
p2 <-p1 + coord_polar() +
   theme_void() + scale_y_continuous(limits = c(-2002100))
p2
  1. 修改色谱

p3 <-
  p2 +
  scale_fill_gradientn(
    colors = c("#54778f""#4EB043""#E69D2A""#DD4714""#A61650"),
    guide = F
  )
p3
  1. 加上label

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

五、结论

这次图形虽然再现成功了,但是还是有很大的差距的。死亡人数这个我计算出来了,但是排上去的话还是很不好看,所以拿下来了。这次碰到的主要问题是R语言画出的图形,圆环部分特别小,如果适当的扩大图形,说不定会有更好的效果。目前技术有限,还不清楚怎么调整下部圈圈的大小,以及在相框等比扩大图形的问题需要解决,如果有知道的大佬,希望告知!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL中索引失效的场景

1.对索引使用左或者左右模糊匹配 当我们使用左或者左右模糊匹配的时候&#xff0c;也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。 比如下面的 like 语句&#xff0c;查询 name 后缀为「林」的用户&#xff0c;执行计划中的 typeALL 就代表了全表扫描&#xf…

什么是SOME/IP-SD?

SOME/IP-SD 是"Scalable service-Oriented MiddlewarE over IP - Service Discovery"的缩写&#xff0c;是SOME/IP的一种特殊报文&#xff0c;可以让Client知道Server可以提供哪些服务&#xff0c;SOME/IP有两种动态发现服务的机制&#xff1a;一种是Offer Service&a…

Javascript作用域 (局部作用域和全局作用域) 详细介绍

Javascript作用域 (局部作用域和全局作用域) 详细介绍 作用域是当前的执行上下文&#xff0c;值和表达式在其中“可见”或可被访问。 常见的作用域为&#xff1a; 全局作用域&#xff1a;脚本模式运行所有代码的默认作用域 函数作用域&#xff1a;由函数创建的作用域 局部作用域…

IP-Guard上传软件到软件中心服务器时,软件ID、显示名称等信息如何获取?

如何实现客户端只能从软件中心下载安装软件? 控制台设置禁止全部软件安装的软件管理策略即可。即使设置禁止,软件中心安装不会受影响的。 在控制台-策略-软件安装管理策略,勾选禁止全部软件的安装。 软件中心客户端下载安装软件后,下载安装包是否会自动删除? 1、http方式…

SpringBoot Actuator详解(四十八)

还是要开心的&#xff0c;万一梦想真得实现了呢 上一章简单介绍了SpringBoot日志配置(四十七) , 如果没有看过,请观看上一章 本章节详细参考了: https://www.cnblogs.com/caoweixiong/p/15325382.html Spring Boot Actuator 模块提供了生产级别的功能&#xff0c;比如健康检查…

.locked加密勒索数据库级别恢复---惜分飞

有客户数据库被加密成.locked结尾的扩展名,数据库无法正常使用 对应的READ_ME1.html文件中信息类似:send 0.1btc to my address:bc1ql8an5slxutu3yjyu9rvhsfcpv29tsfhv3j9lr4. contact email:servicehellowinter.online,if you can’t contact my email, please contact some d…

Leetcode-6425. 找到最长的半重复子字符串

题目描述 给你一个下标从 0 开始的字符串 s &#xff0c;这个字符串只包含 0 到 9 的数字字符。 如果一个字符串 t 中至多有一对相邻字符是相等的&#xff0c;那么称这个字符串是 半重复的 。 请你返回 s 中最长 半重复 子字符串的长度。 一个 子字符串 是一个字符串中一段…

Redis第十章 Redis HyperLogLog与事务、Redis 7.0前瞻

HyperLogLog HyperLogLog(Hyper[ˈhaɪpə])并不是一种新的数据结构(实际类型为字符串类型)&#xff0c;而是一种基数算法,通过 HyperLogLog 可以利用极小的内存空间完成独立总数的统计&#xff0c;数据集可以是 IP、Email、ID 等。 如果你的页面访问量非常大&#xff0c;比如…

JUC基础认识(2)

线程池(重点)&#xff1a;3大方法&#xff0c;7大参数&#xff0c;4种拒绝策略 程序运行的本质:占用系统资源&#xff01;优化资源的使用&#xff01;----->池化技术 池化技术的好处: 1.降低资源的消耗 2.提高响应速度 3.方便管理 线程复用&#xff0c;可以控制最大…

Java ~ Reference ~ FinalizerHistogram【总结】

前言 文章 相关系列&#xff1a;《Java ~ Reference【目录】》&#xff08;持续更新&#xff09;相关系列&#xff1a;《Java ~ Reference ~ FinalizerHistogram【源码】》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;相关系列&#xff1a;《Java ~ Referenc…

通俗讲解元学习(Meta-Learning)

元学习通俗的来说&#xff0c;就是去学习如何学习&#xff08;Learning to learn&#xff09;,掌握学习的方法&#xff0c;有时候掌握学习的方法比刻苦学习更重要&#xff01; 下面我们进行详细讲解 1. 从传统机器学习到元学习 传统的机器学中&#xff0c;我们选择一个算法&…

Fiddler汉化(一箭三连)

我安装的fiddler 操作系统是&#xff1a;Win10 64Bit 操作系统的版本号是&#xff1a;v5.0.20194.41348 for .NET 4.6.1 fiddler下载地址&#xff1a; 我用夸克网盘分享了「02-Web调试工具-FiddlerSetup.exe」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quar…

python调用go语言的代码

最近在学习上述Python&#xff0c;go语言&#xff0c;研究下互相调用的事项&#xff0c;在windows下使用 linux下&#xff1a; gcc -o libpycall.so -shared -fPIC pycall.c windows下&#xff1a; gcc -o libpycall.dll -shared -fPIC pycall.c 但是实际的过程中编译成*.so…

使用扩展卡尔曼滤波(EKF)融合激光雷达和雷达数据(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

复习js的Object.defineProperty()

今天在看尚硅谷的Vue2时&#xff0c;讲到了Object.defineProperty()方法&#xff0c;有点忘了&#xff0c;所以找资料复习了一下。 总说 Object.defineProperty()是一种用于定义对象属性的JavaScript方法&#xff0c;它允许开发人员精确控制一个属性的行为&#xff0c;并可以…

【MySQL】库表的基本操作

文章目录 数据库的基本操作增查删改切入查看当前使用数据库 数据表的基本操作增查所有表查指定表查表字段信息删表改表名改字段名改字段属性增字段删字段 数据表的约束主键约束(PRIMARY KEY)非空约束(NOT NULL)默认值约束(DEFAULT)唯一性约束(UNIQUE)外键约束(FOREIGN KEY)删除…

VSCode 配置 C++ 环境

文章目录 VSCode 配置 C 环境1. 配置 C 编译器1.1 下载 MinGW1.2 添加环境变量1.3 测试 2. 配置编辑器 VSCode2.1 下载 VSCode2.2 安装插件2.3 运行代码 3. 优化Reference VSCode 配置 C 环境 VSCode&#xff08;Visual Studio Code&#xff09;是一款轻量级的代码编辑器&…

Linux系统之部署Node.js环境

Linux系统之部署Node.js环境 一、Node.js介绍1.1 Node.js简介1.2 npm简介1.3 Node.js官网 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、部署Node.js环境3.1 下载Node.js安装包3.2 解压Node.js安装包3.3 复制二进制文件3.4 配置环境变量3.5 检查node及npm版本 四、NP…

EXCEL的自定义格式,比如 @_ ,一个我很少用的功能的简单总结

目录 前言 1 入口&#xff1a; 2 有用的一些功能 2.1 可以自动在 你输入的字符串前后加 预设内容 2.1.1 具体见下面 2.1.2 对比EXCEL得常用拖动功能 2.2 设置填充下划线 2.2.1 效果如下 2.2.2 问题 2.2.3 下划线的显示问题 2.3 比如 #.## 2.4 比如 000.000 2.5 比…

自动化测试webdriver常用API总结

目录 前言&#xff1a; 1. selenium的简单介绍 2. selnium的下载 3. WebDriver常用API 前言&#xff1a; WebDriver 是一个自动化测试工具&#xff0c;主要用于模拟浏览器行为&#xff0c;实现自动化测试。下面是一些 WebDriver 常用 API 总结&#xff1a; 1. selenium的…