高维数据 | R语言数据可视化之日历图

2020-08-06 15:07:48 浏览数 (1)

R语言数据可视化日历图

日历图,在环境与生态指标的动态监测中应用普遍,特别适用于显示不同时间段的指标情况。比如污染物中重金属含量、空气中PM2.5变化情况。在金融行业中检测股票收盘价、回测信号等指标中也很常见。生物医药领域的血糖或血压日记录值,新型冠状病毒的逐日确诊数量等等。通过时间分布的日历图动态监测数据,以弥补普通线图的不足。

01

随机生成数据

#构建数据框

代码语言:javascript复制
>Data<data.table(date=seq(as.Date("1/01/2019","%d/%m/%Y"),as.Date("31/12/2019","%d/%m/%Y"),"days"),PM2.5=runif(365,50,350)
> Data
           date     PM2.5
  1: 2019-01-01  87.79283
  2: 2019-01-02 319.75490
  3: 2019-01-03 325.30976
  4: 2019-01-04 188.61730
  5: 2019-01-05 144.84692
 ---                     
361: 2019-12-27 137.78985
362: 2019-12-28 128.80200
363: 2019-12-29 250.66169
364: 2019-12-30 159.78224
365: 2019-12-31 207.37999

02

数据处理

代码语言:javascript复制
> Data$Year<-as.integer(strftime(Data$date,'%Y'))#年份
> Data$month<-as.integer(strftime(Data$date,'%m'))#月份
> Data$week<-as.integer(strftime(Data$date,'%W')) #周数,通常是以星期一作为一周的第一天
> Data$weekday<-as.integer(strftime(Data2$date,'%u'))#周数,以小数形式表示的工作日(1 - 7,星期一是1)
> Data$day<-strftime(Data2$date,'%d')#天数,以十进制数(01-31)表示的月份的日期。
> Data$month1<-month.abb[Data$month]#月份英文缩写
> Data$weekday1<-factor(Data$weekday,levels=(1:7),labels=(c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")),ordered=TRUE)
> Data<-Data%>%group_by(month1)%>%mutate(monthweek=1 week-min(week))
> Data
# A tibble: 365 x 10
# Groups:   month1 [12]
   date       PM2.5  Year month  week weekday day   month1 weekday1 monthweek
   <date>     <dbl> <int> <int> <int>   <int> <chr> <chr>  <ord>        <dbl>
 1 2019-01-01  87.8  2019     1     0       2 01    Jan    Tue              1
 2 2019-01-02 320.   2019     1     0       3 02    Jan    Wed              1
 3 2019-01-03 325.   2019     1     0       4 03    Jan    Thu              1
 4 2019-01-04 189.   2019     1     0       5 04    Jan    Fri              1
 5 2019-01-05 145.   2019     1     0       6 05    Jan    Sat              1
 6 2019-01-06 109.   2019     1     0       7 06    Jan    Sun              1
 7 2019-01-07 138.   2019     1     1       1 07    Jan    Mon              2
 8 2019-01-08 207.   2019     1     1       2 08    Jan    Tue              2
 9 2019-01-09 229.   2019     1     1       3 09    Jan    Wed              2
10 2019-01-10  63.5  2019     1     1       4 10    Jan    Thu              2
# ... with 355 more rows

03

绘图主题

#设置图片中的线条,字体,颜色等参数

代码语言:javascript复制
>mytheme=theme(plot.title = element_text(face = "bold",hjust = 0.5,size=20,color = "black"),axis.title=element_text(face = "bold",hjust = 0.5,size=12,color="black"))

04

绘图

代码语言:javascript复制
>ggplot(Data,aes(weekday1,monthweek,fill=PM2.5))
 geom_tile(colour="white")
 scale_fill_gradient(low="#56B1F7",high="#132B43",space="Lab",na.value = "grey50",guide="colourbar",aesthetics = "fill")
 geom_text(aes(label=day),size=3,colour="black",position="identity")
 facet_wrap(~month1,nrow=4)
 scale_y_reverse() labs(title="Daily PM2.5 in 2019")
 xlab("Weekday") ylab("Monthweek") mytheme
代码语言:javascript复制
>ggplot(Data,aes(weekday1,monthweek,fill=PM2.5))
 geom_tile(colour="white")
 scale_fill_gradient(low="Yellow",high="Red",space="Lab",na.value = "grey50",guide="colourbar",aesthetics = "fill")
 geom_text(aes(label=day),size=3,colour="black",position="identity")
 facet_wrap(~month1,nrow=4) scale_y_reverse()
 labs(title="Daily PM2.5 in 2019") xlab("Weekday")
 ylab("Monthweek") mytheme

小结

1、日期值相关处理见基础知识 | R语言数据处理之日期值的转换

2、strftime()是日期、时间转换成为字符的函数

http://127.0.0.1:14091/library/base/html/strptime.html

3、as.integer()是创建整数向量的函数。

http://127.0.0.1:14091/library/base/html/integer.html

4、scale_fill_gradientn()创建颜色梯度。

http://127.0.0.1:14091/library/ggplot2/html/scale_gradient.html

5、geom_tile()函数是ggplot2中利用tile中心和大小绘制矩形图

http://127.0.0.1:14091/library/ggplot2/html/geom_tile.html

6、facet_wrap()函数主要是用于分面。一维变成二维。

http://127.0.0.1:14091/library/ggplot2/html/facet_wrap.html

0 人点赞