日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

實用時間序列圖之R實現(xiàn)干貨

 笨鳥先飛龍 2020-09-02

網(wǎng)絡搜索“時間序列圖”一詞,出現(xiàn)的多為折線圖(圖1),這也是時序圖中使用最多的一種類型,那下面我們就從折線類型的時序圖開始吧。

圖1 “時間序列圖”的搜索結果

1
 工具包 

今天的分享主要使用到ggplot2scalesreshape2三個R包:畫圖首選當然還是強大的ggplot2包;scales包提供美化坐標軸、圖例等的一些函數(shù);reshape2包用于數(shù)據(jù)的格式轉(zhuǎn)換,作圖時通常需要將“寬格式”的數(shù)據(jù)轉(zhuǎn)換為“長格式”的數(shù)據(jù)格式。

library(ggplot2)
library(scales)
library(reshape2)

2
 案例數(shù)據(jù) 

本例所用的數(shù)據(jù)為2020年3月1日至4月14日四個國家的新冠肺炎的疫情數(shù)據(jù),表1展示了前10天的數(shù)據(jù),此為“寬格式”的數(shù)據(jù)格式。為作圖做準備,需使用as.Date函數(shù)將date變量轉(zhuǎn)換為時間類型。

表1 案例數(shù)據(jù)庫(部分)

data1<-read.csv('dailynew.csv',header=TRUE) #讀取數(shù)據(jù)
Sys.setlocale('LC_TIME', 'English')  #根據(jù)需要可選擇更改時間顯示為英文
data1$date <-as.Date(data1$date)  #將date變量轉(zhuǎn)換為時間類型
3
 繪制時序圖 

3.1單個類別

ggplot2繪圖的基本思路依次指定數(shù)據(jù)集data、數(shù)據(jù)映射aes、圖類型geom_。首先,我們展示一個國家發(fā)病情況的時序圖。通過ggplot()函數(shù)指定數(shù)據(jù)庫為data1,將date和Brazil分別映射到x和y軸, geom_line指定折線圖(color和size分別指定折線的顏色和粗細),那么,基本的時序圖雛形就出來了(圖2)。

ggplot(data=data1,aes(x=date,y=Brazil))+
  geom_line(color='lightskyblue',size=1.3)

圖2 折線類型的時間序列圖
除了折線圖,柱形和散點的時間序列圖也應用較多,只需要更換相應的幾何圖層函數(shù)即可(圖3和圖4)。
#柱形
ggplot(data=data1,aes(x=date,y=Brazil))+
  geom_bar(stat = 'identity',fill='lightskyblue')
#散點
ggplot(data=data1,aes(x=date,y=Brazil))+
  geom_point(color='lightskyblue',size=3)

圖3 柱形時間序列圖


圖4 散點型時間序列圖
3.2多個類別
那么,如果想同時展示多個多家的發(fā)病情況,我們需通過melt函數(shù)將數(shù)據(jù)格式先做“寬轉(zhuǎn)長”,轉(zhuǎn)換后數(shù)據(jù)變?yōu)槿校簳r間變量、類別變量和對應值。
data1.1<-melt(data1,id='date') 
names(data1.1)<-c('date','country','newcases')  #重命名
表2 轉(zhuǎn)換后的數(shù)據(jù)庫

作圖思路類似地,通過ggplot()函數(shù)指定數(shù)據(jù)庫,指定映射到x和y軸的變量, 此處應注意的是,由于有多個國家,在aes中需用特定參數(shù)指定做顏色分類的變量country(折線圖和點圖用color,柱狀圖用fill)。facet_grid是將不同的國家分到不同的繪圖面板中展示,country~. 表示縱向排列多個繪圖面板, .~country則表示橫向排列。theme主題函數(shù)中l(wèi)egend.position 參數(shù)指定 'none'表示隱藏圖列。

ggplot(data1.1,aes(x=date,y=newcases,color=country))+   
geom_line(size=1.3)+
  facet_grid(country~.,scales = 'free')+ #縱向
  theme(legend.position = 'none')
圖5 多分類折線型時間序列圖
ggplot(data1.1,aes(x=date,y=newcases,fill=country))+  
geom_bar(stat = 'identity',size=0.3)+
  facet_grid(.~country,scales = 'free')+ #橫向
  theme(legend.position = 'none')

圖6 多分類柱形時間序列圖

4
 圖形美化 

前面,我們按照基本繪圖思路(數(shù)據(jù)集-->數(shù)據(jù)映射-->圖類型)和分面設置,得到時序圖的”雛形”,然而,很多細節(jié)還需要完善。其中,對時間序列圖非常重要的時間坐標標簽的設置,本例按照數(shù)據(jù)的時間設置起止時間和時間間隔3天,賦值給變量datebreak,然后在scale_x_date使用即可;根據(jù)數(shù)據(jù)的時間長短,還可以按周week、月month、年year。其他常規(guī)有標題、字體、顏色等的設置,都是使用ggplot2美化常用的函數(shù)。

datebreak<-seq(as.Date('2020-03-01'),as.Date('2020-04-15'),by='3 days')
ggplot(data1.1,aes(x=date,y=newcases,fill=country))+ 
  geom_bar(stat = 'identity',size=0.3)+  #柱形圖 
facet_grid(country~.,scales = 'free')+  #分面
  ylab('Cases')+  #縱坐標標題
  xlab('Date')+   #橫坐標標題
  ggtitle('四個國家新增病例情況')+  #圖的標題
  scale_x_date(breaks = datebreak,labels=date_format('%d-%b'))+ 
## theme主題美化
  theme(axis.title = element_text(size=18),  #坐標標題的設置
        plot.title = element_text(size=20,hjust=0.5),  #圖標題的設置
        axis.text.x = element_text(angle=25,hjust=0.8,size=15), #x坐標標簽設置
        axis.text.y = element_text(size=15), # y坐標標簽設置
        strip.text= element_text(size=rel(1.2)),  # 分面標簽設置
        panel.background = element_rect(colour = 'gray99'),  #畫板背景設置
        legend.position = 'none')+ #圖例位置設置:不顯示
  scale_fill_brewer(palette ='Set2') # 顏色設置

圖7 調(diào)整后的多分類柱形時間序列圖

根據(jù)數(shù)據(jù)內(nèi)容和所想展示的信息,我們可以通過在ggplot2包里找到相應的函數(shù)實現(xiàn)。簡單美化后的時序圖如圖7??赐晟厦娴膬?nèi)容,是不是好奇自己手頭的數(shù)據(jù)能做出什么樣的時序圖呢?那就趕快去試一下吧。

制作:胡建雄、吳君樂

初審:胡建雄

審核:肖建鵬、劉濤

指導:馬文軍

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多