专栏首页优雅Rggplot2 案例:使用 ggplot2 绘制绘制一幅气泡地图展示各国疫情状况

ggplot2 案例:使用 ggplot2 绘制绘制一幅气泡地图展示各国疫情状况

新冠肺炎确诊患者们都分布在那里呢?约翰·霍普金斯大学提供了一份数据集,使用这份数据集我们可以绘制一幅气泡地图展示这些确诊患者的分布,代码比较简单:

首先导入我们需要的几个 R 包:

library(ggplot2)
library(sf)
library(readr)
library(dplyr)

导入世界地图并把 crs 转换成 4326(其实这份数据的 crs 就是 4326):

worldmap <- read_sf('world.geo.json') %>%
  st_transform(crs = 4326)

把疫情数据读取进来并根据经纬度坐标把这个数据框转换成 sf 对象,同样使用 4326 投影坐标系,这样地图和数据才不会分家:

read_csv('time_series_19-covid-Confirmed.csv') %>%
  select(Lat, Long, `3/4/20`) %>%
  `colnames<-`(c("lat", "long", "con")) %>%
  st_as_sf(coords = c("long", "lat"), crs = 4326) -> con_df

最后绘制地图:

mybreaks <- c(1, 20, 100, 1000, 50000)
ggplot(worldmap) +
  geom_sf(size = 0.1, color = "white", fill = NA) +
  geom_sf(data = con_df, aes(size = con,
                             color = con)) +
  theme_modern_rc(base_family = cnfont,
                  subtitle_family = cnfont,
                  caption_family = cnfont,
                  grid = "") +
  worldtilegrid::theme_enhance_wtg() +
  theme(panel.grid = element_blank()) +
  scale_size_continuous(name = "Confirmed cases",
                        trans = "log",
                        range = c(1, 7),
                        breaks = mybreaks,
                        labels = c("1-19", "20-99", "100-999", "1,000-49,999", "50,000+")) +
  scale_color_viridis_c(option = "inferno",
                        name = "Confirmed cases",
                        trans = "log",
                        breaks = mybreaks,
                        labels = c("1-19", "20-99", "100-999", "1,000-49,999", "50,000+")) +
  guides(color = guide_legend()) +
  labs(title = "新冠肺炎的全球分布",
       subtitle = "截止:2020 年 3 月 4 日",
       caption = "数据来源: CSSEGISandData/COVID-19: Novel Coronavirus (COVID-19) Cases, provided by JHU CSSE\nhttps://github.com/CSSEGISandData/COVID-19\n绘制:TidyFriday")

❝本文的附件和代码可以从知识星球下载:https://t.zsxq.com/iEYVjqr ❞

本文分享自微信公众号 - 优雅R(elegant-r)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CubicHeatMap - 重磅推出 - 魔方热图 - 伪三维

    这种热图,四四方方,其实在TBtools里面,可以有不少变化,比如不要用颜色对应数值,直接用圈的大小来对应数值

    王诗翔呀
  • 「Docker」使用 Docker run 覆盖 ENTRYPOINT

    原文:https://phoenixnap.com/kb/docker-run-override-entrypoint

    王诗翔呀
  • 「R」显示英文错误

    中文使用 R 经常看到各种乱码文字,让人看不懂意思,特别是在 Windows 系统上。

    王诗翔呀
  • NDoc - .NET 代码文档生成器

    NDoc 可以将 C#.NET 编译生成的程序集和对应的 /doc XML 文档,自动转换成如 .NET Framework SDK 类库文档或者 MSDN L...

    张善友
  • 前端|npm全局创建wps加载项

    基于vscode的方式创建wps加载项在获取类型之后,无法自动生成wps加载项,在网上查询相关问题内容也无果。不过Wps官方文档又更新了通过npm全局的方式创建...

    算法与编程之美
  • 为什么微软office动辄几个GB而wps实现相同功能却几百兆呢?

    客观评判这件事,wps从技术层面距离office还是有着非常大的差异,目前wps只是完成了office一些常见的功能,很多不常见的特效或者功能wps压根没有去做...

    程序员互动联盟
  • VMware网络设置

    踏歌行
  • 15.selenium_case04

    hankleo
  • 人工智能法律服务的前景与挑战

    image.png 曹建峰 腾讯研究院研究员   在刚刚过去的周末,想必大家都被腾讯AI Lab研发的围棋人工智能程序“绝艺”刷屏了,在第10届UEC杯...

    腾讯研究院
  • JavaScript 中的代理对象

    JavaScript 支持 setter 和 getter 已经很长时间了。他们用带有 set 和 get 关键字的简单语法来拦截对象的属性访问和值的修改操作...

    疯狂的技术宅

扫码关注云+社区

领取腾讯云代金券