11月13日台北微涼
沒想到一個月過得這麼快~ 忙碌中就過了XD
進入今天的內容
我們昨天處理完資料也畫了一張ggplot了
那接下來該如何將視窗切成3X3然後print出來呢?
理想圖
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 一口氣閱讀多個圖表
End.