簡體   English   中英

如何在時間序列數據的 x 軸上繪制不等間隔?

[英]How to plot Unequal Interval on x axis of a time series data?

我正在使用plotrix包來使用顏色可視化數據的變化。 數據可在此處獲得。 我正在使用下面的代碼來繪制數據。

library(plotrix)
my_colors1=c("red", "green","blue")
a<-read.csv("DataSt.csv")
x<-a$Year
y<-a$TP
clplot(x, y, main="",lwd=5,labels=y,levels=c(37,964,4377),col=my_colors1, showcuts=T, bty="n",xlab="Year", ylab = "numbers", axes=F)
axis(1, at = a$Year, las=2) 
axis(2, at = seq(0, 4400, by = 100), las=2)

我得到了上面的圖表輸出

我想減少 1975 年和 1989 年之間的軸空間。請幫我在 x 軸上獲得不等的間隔。

這樣做有點危險,因為觀看者可能沒有意識到 x 軸值之間的間距不一致。 然而,以下示例顯示了將 x 值視為因子水平的可能解決方案。 問題是該繪圖功能只允許數值。 因此,我使用因子進行繪圖,但隨后需要使用數值在使用segments之間繪制某種插值:

a <- structure(list(Year = c(2021L, 2020L, 2019L, 2018L, 2017L, 2016L, 
  2015L, 2014L, 2013L, 2012L, 2011L, 2010L, 2009L, 2008L, 2007L, 
  2006L, 2005L, 2004L, 2003L, 2002L, 2001L, 2000L, 1999L, 1998L, 
  1997L, 1996L, 1995L, 1994L, 1993L, 1992L, 1991L, 1990L, 1989L, 
  1975L), TP = c(785L, 848L, 1067L, 1079L, 1263L, 678L, 1204L, 
  542L, 661L, 387L, 3534L, 4377L, 964L, 244L, 237L, 145L, 86L, 
  37L, 39L, 23L, 14L, 11L, 7L, 9L, 6L, 3L, 7L, 7L, 6L, 1L, 1L, 
  1L, 2L, 1L)), class = "data.frame", row.names = c(NA, -34L))
a$Year <- factor(a$Year)
a <- a[order(a$Year),]
head(a)

my_colors1=c("red", "green","blue")

plot(TP ~ Year, a, col = NA, border = NA, las = 2)
for(i in 2:nrow(a)){
  b <- as.data.frame(approx(x = as.numeric(a$Year[(i-1):i]), y = a$TP[(i-1):i], n = 100))
  b$col <- my_colors1[as.numeric(cut(b$y, breaks = c(-Inf,37,964,4377,Inf)))]
  segments(x0 = b$x[-nrow(b)], x1 = b$x[-1], y0 = b$y[-nrow(b)], y1 = b$y[-1], col = b$col[-1])
}
abline(h = c(37,964), lty = 2)

在此處輸入圖像描述

暫無
暫無

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

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