前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高维数据 | R语言数据可视化之日历图

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

作者头像
黑妹的小屋
发布2020-08-06 15:07:48
1.9K0
发布2020-08-06 15:07:48
举报
文章被收录于专栏:菜鸟学数据分析之R语言

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟学数据分析之R语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档