iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 30
1
自我挑戰組

R語言-繪圖的極限!系列 第 30

R語言-繪圖的極限!Day-30 ggplot分割視窗-完結篇

  • 分享至 

  • xImage
  •  

11月13日台北微涼

沒想到一個月過得這麼快~ 忙碌中就過了XD

進入今天的內容

我們昨天處理完資料也畫了一張ggplot了

那接下來該如何將視窗切成3X3然後print出來呢?

理想圖

https://ithelp.ithome.com.tw/upload/images/20181113/20112574QaJAnWyMv5.png

library(readxl)
library(tidyverse)
library(xlsx)
library(data.table)
windowsFonts(A=windowsFont("微軟正黑體")) 
yourname = paste(Sys.getenv("USERNAME")) #自動找出本機使用者名稱

path = paste("C:\\Users\\sam.lee\\Desktop\\貓空\\",sep="") #設定讀檔路徑

xls = list.files(path,pattern = "cat") #找出在路徑 : path 中名稱有cat的檔案
hold_c_time=rep(0,length(xls))
for (i in 1:length(xls)){
  hold_c_time[i]=file.info(paste(path,xls[i],sep=""))[,"mtime"]
  xname=xls[order(hold_c_time,decreasing = T)]
}
#讀取多檔案
for(i in 1:length(xname))
{
  if(i==1)
    x=fread(paste(path,xname[i],sep=""))
  else
    x=rbind(x,fread(paste(path,xname[i],sep="")))[-length(x$星期),]
}

x = x[1:length(x$營運日)-1]


x$總運量=as.numeric(parse_number(x$總運量))
x$week = 0
for (i in 1:length(x$總運量)) {
  if(x[i,2]=="週一")
    x[i,4] = 1
  if(x[i,2]=="週二")
    x[i,4] = 2
  if(x[i,2]=="週三")
    x[i,4] = 3
  if(x[i,2]=="週四")
    x[i,4] = 4
  if(x[i,2]=="週五")
    x[i,4] = 5
  if(x[i,2]=="週六")
    x[i,4] = 6
  if(x[i,2]=="週日")
    x[i,4] = 7
}

x$營運日 = as.POSIXct(gsub("107","2018",x$營運日))
x = x[,-2] ; colnames(x)[3] = "星期"


sep = list()
for (i in 1:4) {
  sep[[i]] = x[which(substr(x$營運日,1,7) == paste0("2018-0",i))]
}

以上都是在資料處理 , 以下則是分割視窗

大概解釋一下做法

我先使用grid.newpage() 創造新的頁面

再將頁面切割成3X3

之後給定一個X 讓圖能依照順序放進去

grid.newpage()
pushViewport(viewport(layout = grid.layout(3,3))) ####頁面分割3*3
vplayout <- function(x,y){viewport(layout.pos.row = x, layout.pos.col = y)}
x<-expand.grid(h=c(1:3), w=c(1:3))

class(sep[[1]]$營運日)

for (i in 1:4) {
  pic = ggplot(sep[[i]],aes(x = sep[[i]]$營運日 , y = sep[[i]]$總運量)) + 
    geom_line(size = 2 , col= "darkblue") +
    labs(x = "日期" , y = "數量")+
    theme(axis.text.x=element_text(face="bold",size=8,angle=360,color="#333333"))+
    theme(axis.text.y=element_text(face="bold",size=8,color="#333333"))+
    theme(axis.title.x =element_text(hjust = 0.5,color="black",face="bold",size=12,family = "A"))+
    theme(axis.title.y =element_text(hjust = 0.5,color="black",angle=90,
                                     face="bold",size=12,family = "A"))+
    theme(panel.background=element_rect(fill='#cc9999', color="#000000",col = "red"))+#改背景顏色和線
    theme(plot.background = element_rect("gray"))+
    theme(panel.grid.major=element_line(size=0.2,colour="#ffffff"))+
    theme(panel.grid.minor=element_blank())+
    scale_x_datetime(date_breaks = "7 days")
  
  print(pic, vp = vplayout(x[i,1],x[i,2]))
}

成果展現~ 即可將圖表成功分割成3x3 一口氣閱讀多個圖表

https://ithelp.ithome.com.tw/upload/images/20181113/20112574U18J3eduPz.png

End.


上一篇
R語言-繪圖的極限!Day-29 ggplot分割視窗-前置篇
系列文
R語言-繪圖的極限!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言