全球疫情图绘制(静态)

2021-04-09 10:52:37 浏览数 (1)

即中国疫情图之后,又来了一个小作业,作业要求是使用R平台相关绘图工具绘制全国疫情热力图(10分)。

代码语言:javascript复制
library(maps)
library(ggplot2)
library(RColorBrewer)
library(plyr)

按照做中国疫情图的思路,先把全球数据模板进行导入(来源:张杰《R语言数据可视化之美 》)然后在和自己的数据进行匹配,用plyr包中的join函数。整理好的数据如下所示:

代码语言:javascript复制
colormap<-c(rev(brewer.pal(9,"Greens")[c(4,6)]), brewer.pal(9,"YlOrRd")[c(3,4,5,6,7,8,9)])
mydata1<-read.csv("Country_Data.csv",stringsAsFactors=FALSE)#这个是全球数据
names(mydata1)=c("Country","Scale") #重新命名
mydata2 =  read.csv("world_data.csv",header=TRUE)  #我们的数据(疫情)
#将两个表格匹配
mydata <- join(mydata1, mydata2, type="full")

该数据包含某一日(具体哪天忘记了)全球各个国家的累计确认人数的数据,数据集包含地理位置(经度:long,纬度:lat),累计确诊人数ratio。该数据已放到github中,如果想尝试实现以,可通过文末阅读原文获取资料。注意的是:我们的数据(mydata2)和模板数据(mydata1)是用country合并的。接下来把ratio参数设置成分类型,以便于好绘制。

代码语言:javascript复制
mydata$fan<-cut(mydata$ratio,
breaks=c(min(mydata$million,na.rm=TRUE),
0,1000,5000,10000,50000,200000,500000,2000000,
max(mydata$ratio,na.rm=TRUE)),
labels=c(" <=0","0~1000","1000~5000","5000~10000","10000~50000","50000~200000",
"200000~500000","500000~2000000"," >=2000000"),
order=TRUE)
#定义地图用全球的
world_map <- map_data("world")
#绘图
ggplot() 
geom_map(data=mydata,aes(map_id=Country,fill=fan),map=world_map) 
geom_path(data=world_map,aes(x=long,y=lat,group=group),colour="black",size=.2) 
scale_y_continuous(breaks=(-3:3)*30)  
scale_x_continuous(breaks=(-6:6)*30)  
scale_fill_manual(name="Ratio",values= colormap,na.value="grey75") 
guides(fill=guide_legend(reverse=TRUE))  
theme_minimal()

绘制结果如下:

参考文献:

R语言数据可视化之美——李杰(强力推荐!好书!)

代码,数据与相关资料已放在我的github上了,见文末阅读原文。

0 人点赞