簡體   English   中英

時間序列雙y軸圖,x軸在R中為“年”-“月”

[英]Time series double y axis plot with x axis in “year”-“month” in R

對於r中的雙y軸圖,我有以下代碼。 一切正常,但我想將x軸從每18個月更改為每12個月。 我已經嘗試過想到的每個“ axis(side = 1,at = ....)”。 0:1.5之間的任何隨機數均可用於“ Data $ Monthly_Gen”,而0:100則可用於Data $ Ave_GenXXXX以進行再現。

Data2 <- ts(Data$Monthly_Gen, start=c(2005,1),end=c(2012,12),frequency=12)   
Data2B <- ts(Data$Ave_Gen_MonthSOCO, start=c(2005,1),end=c(2012,12),frequency=12)  
Data2C <- ts(Data$Ave_Gen_MonthTVA, start=c(2005,1),end=c(2012,12),frequency=12) 
Data2D<-ts(Data$Monthly_Gen_Othersx10,start=c(2005,1),end=c(2012,12),frequency=12)
Data2E <- ts(Data$Monthly_Gen_Othersx9, start=c(2005,1),end=c(2012,12),frequency=12)



par(mar=c(4, 4, 2, 4) + 0.1)
plot(as.xts(Data2), major.format = "%Y-%m",ylab="",las=1,ylim=c(0,2))
lines(as.xts(Data2D), major.format = "%Y-%m", xlab="", ylab="",  
type="l", col="black",main="",lty="dotted" ,lwd=2)  
lines(as.xts(Data2E), major.format = "%Y-%m", xlab="", ylab="",  
type="l", col="black",main="",lty="longdash" ,lwd=2)  
mtext("Generation",side=2,line=3)  
box()
par(new=TRUE)  
plot(as.xts(Data2B), major.format = "%Y-%m", xlab="", ylab="",  
axes=FALSE, type="l", col="#E69F00",main="",lwd=2,ylim=c(0,130))  
mtext("Monthly Average Lambda",side=4,col="black",line=2.5)  
axis(4, col="black",col.axis="black",las=1)
lines(as.xts(Data2C), major.format = "%Y-%m", xlab="", ylab="",  
type="l", col="#56B4E9",main="",lwd=2.5)
mtext("Date",side=1,col="black",line=3)
legend("topright",legend=c("Total Generation","X1 Generation","X2 Generation","Area Lambda","X2 Area Lambda"),text.col=c("black","black","black","#E69F00","#56B4E9"),col=c("black","black","black","#E69F00","#56B4E9"),cex=.75,lty=c("solid","longdash","dotted","solid","solid"))`

這與zoo很容易做到。 我認為zoots更強大。

#Create zoo series
Data2 <- zooreg(runif(96,0,1.5), start = as.yearmon(2005),end = as.yearmon(2012), freq = 12)
Data2B <- zooreg(runif(96,0,100), start = as.yearmon(2005),end = as.yearmon(2012), freq = 12)

#Create 12-month sequence for axis
twelve <-seq(1,length(Data2),12)

plot(Data2,ylab="",las=1,ylim=c(0,2),xaxt = "n")
#add x-axis at 12 months
axis(1,at=index(Data2)[twelve],labels=format(index(Data2)[twelve],"%Y-%m"))
par(new=TRUE)
plot(Data2B,xlab="",ylab="",las=1,ylim=c(0,130),xaxt = "n",yaxt = "n",col="blue")
#add yy axis
axis(4, col="black",col.axis="black",las=1)

在此處輸入圖片說明

這是僅使用基本plot()函數的解決方案。 我認為您真正想要的是seq.Date()的東西

set.seed(123)
nn <- 7*12  # months
x1 <- ts(rnorm(nn),start=c(2005,1),freq=12)
x2 <- ts(rpois(nn,20),start=c(2005,1),freq=12)
tt <- seq.Date(from=as.Date("2005-01-01"),by="month",length.out=nn)
plot(tt, x1, col="blue", type="l", xaxt="n", xlab="", ylab="")
par(new=TRUE)
plot(tt, x2, col="red", type="l", xaxt="n", yaxt="n", xlab="", ylab="")
axis(4)
dates <- seq(from=as.Date("2005-01-01"), to=as.Date("2012-12-01"), by="18 month")
axis(1, at=dates, labels = format(dates, "%Y-%m"))

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM