即中国疫情图之后,又来了一个小作业,作业要求是使用R平台相关绘图工具绘制全国疫情热力图(10分)。
library(maps)library(ggplot2)library(RColorBrewer)library(plyr)
按照做中国疫情图的思路,先把全球数据模板进行导入(来源:张杰《R语言数据可视化之美 》)然后在和自己的数据进行匹配,用plyr包中的join函数。整理好的数据如下所示:
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参数设置成分类型,以便于好绘制。
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()
绘制结果如下: