簡體   English   中英

將時間序列中的點與 R 中的 NA 字段連接起來

[英]connect points in a time series with NA fields in R

這是我正在使用的數據框:

Month   HSI GSI K
Dec-12  1.703   0.516   0.315
Jan-13  1.841   0.441   0.316
Feb-13  NA  NA  NA
Mar-13  NA  NA  NA
Apr-13  NA  NA  NA
May-13  3.365   0.627   0.324
Jun-13  NA  NA  NA
Jul-13  NA  NA  NA
Aug-13  4.097   0.456   0.317
Sep-13  NA  NA  NA
Oct-13  2.582   0.977   0.336
Nov-13  3.728   1.178   0.352
Dec-13  2.211   3.937   0.352
Jan-14  1.617   1.163   0.336

我試圖在同一張圖上繪制 HSI、GSI 和 K。 對於那件事我沒有任何疑問。 但是,我的問題是由於NA字段,我的曲線不連續,而且我只在 x 軸上得到年份。 這是你使用的:

library(zoo)     #to plot multiple lines in the graph
library(timeDate)     #to create a time series by month
tS = timeSequence(from = "2012-12-01", to = "2014-01-01", by = "month")
plot(tS,HSI, type="l",ann="False",ylim=c(1,5), pch=22, lty=1,lwd=2, col="red")
lines(tS,GSI,type="l",pch=22,lty=1,lwd=2, col="green")     #to add other lines
lines(tS,K, type="l",pch=22,lty=1,lwd=2, col="blue")

請問有什么幫助嗎? 謝謝

您可以將數據框轉換為zoo對象並使用plot.zoo設施:

library(zoo)
z <- zoo(df[ , c("HSI", "GSI", "K")], order.by = as.yearmon(df$Month, "%b-%y"))

plot(na.omit(z), plot.type = "single", col = c("red", "green", "blue"))

plot(na.omit(z), plot.type = "single", col = c("red", "green", "blue"), xaxt = "n")
axis(side = 1, at = index(z), labels = format(index(z), "%b-%y"))

在此處輸入圖片說明

您也可以嘗試ggplot替代方案:

library(scales)
library(ggplot2)

z2 <- fortify(z, melt = TRUE)

ggplot(data = na.omit(z2), aes(x = Index, y = Value, colour = Series)) +
  geom_line() +
  scale_x_yearmon(breaks = z2$Index, format = "%b %Y") +
  theme(axis.text.x  = element_text(angle = 45, vjust = 1, hjust = 1))

在此處輸入圖片說明

另一種ggplot可能性:

# convert year-month dates to as.POSIXct
df$Month <- as.POSIXct(as.Date(paste0(df$Month, "-01"), "%b-%y-%d"))

# reshape data from wide to long
library(reshape2)
df2 <- melt(df, id.var = "Month")

ggplot(data = na.omit(df2), aes(x = Month, y = value, colour = variable)) +
  geom_line()

在此處輸入圖片說明

當您有as.POSIXct格式的日期時,您可以使用scale_x_datetime輕松格式化標簽: breaks = date_breakslabels = date_format ,例如

ggplot(data = na.omit(df2), aes(x = Month, y = value, colour = variable)) +
  geom_line() +
  scale_x_datetime(breaks = date_breaks("2 months"),
                   labels = date_format("%Y-%m"))

在此處輸入圖片說明

您可以使用complete.cases如下。 t成為您的 data.frame:

x <- complete.cases(t)
plot(tS[x],t$HSI[x], type="l",ann="False",ylim=c(0,5), pch=22, lty=1,lwd=2, col="red")
lines(tS[x],t$GSI[x],type="l",pch=22,lty=1,lwd=2, col="green")     #to add other lines
lines(tS[x],t$K[x], type="l",pch=22,lty=1,lwd=2, col="blue")

請注意,我在調用plot更改了ylim ,因為藍線超出了繪圖限制。

在此處輸入圖片說明

暫無
暫無

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

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