繁体   English   中英

如何在R中绘制叠加时间序列?

How to plot overlaying time series in R?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想及时比较两个不同变量的值。

例如,有两个数据集:

数据集1(日期,值)和数据集2(日期,值)

为了首先绘制,我们可以执行以下操作:

x.Date <- as.Date(dataset1$Date)
    x <- zoo(dataset1$Value, x.Date)
    plot(x)

我想在同一个窗口中添加 (dataset2$value, dataset2$Date),并偶然设置不同的颜色。

值 dataset1$Date 和 dataset2$Date 不一定相同(有些日子可能重叠,有些日子不重叠),例如 dataset1$Date 可能包含 (dec01, dec02, dec03, dec05) 和 dataset2$Date (dec02, dec03, dec06 )。

有谁知道如何在同一个窗口中绘制两个(或多个)时间图?

5 个回复

有几种选择。 以下是使用zoo对象的三个选项。

set.seed(1)
xz = zoo(ts(rnorm(20), frequency = 4, start = c(1959, 2)))
yz = zoo(ts(rnorm(20), frequency = 4, start = c(1959, 2)))
# Basic approach
plot(xz)
lines(yz, col = "red")
# Panels
plot.zoo(cbind(xz, yz))
# Overplotted
plot.zoo(cbind(xz, yz), 
         plot.type = "single", 
         col = c("red", "blue"))

如果您正在绘制常规ts对象,您还可以探索ts.plot

set.seed(1)
x = ts(rnorm(20), frequency = 4, start = c(1959, 2))
y = ts(rnorm(20), frequency = 4, start = c(1959, 2))
ts.plot(x, y, gpars = list(col = c("black", "red")))

我手头有同样的任务,经过一些研究,我在 r 中遇到了 ts.plot {stats} 函数,这非常有帮助。

该函数的用法如下:

    ts.plot(..., gpars = list())

gpars 是图形参数,您可以在其中指定绘图的图形组件。

我有一个与此类似的数据并存储在一个名为 time 的变量中:

           [,1] [,2]  [,3]  [,4] [,5]  [,6]  [,7]  [,8]   [,9] [,10]
    V3     1951 1100   433  5638 1760  2385  2602 11007   2490   421
    V5      433  880   216  4988  220  8241 13229 18704   6289   421
    V7     4001  440   433  3686  880  9976 12795 21036  13229  1263
    V9     2385 1320   650  8241  440 12795 13229 19518  11711  1474
    V11    4771  880  1084  6723    0 17783 17566 27326  11060   210
    V13    6940  880  2168  2602 1320 21036 16265 10843  15831  1474
    V15    3903 1760  1951  3470    0 18217 14964     0  13663  2465
    V17    4771  440  2819  8458  880 25591 24940  1518  17783  1895
    V19    7807 1760  5205  2385    0 14096 22771 13880  12578  1263
    V21    5205  880  5205  6506  880 28410 18217 13229  19952  1474
    V23    6506 1760  5638  7590  880 14747 26675 11928  12795  1474
    V25    7373  440  5855 10626    0 19301 21470 15398  19952  1895
    V27    5638 2640  6289     0  880 16482 20603 30796  14313  2316
    V29    8241  440  6506  6723  880 11277 35784 25157  23205  4423
    V31    7373 2640  6072  8891  220 17133 27109 31013  27287  4001
    V33    6723  660  5855 14313  660  6940 26892 17566  24111  4844
    V35    9325 2420  9325 12578    0  6506 30796 34483  23422  5476
    V37    4771  440  6872 12361  880  9325 36218 25808  30362  4844
    V39    9976 2640  7658 12361  440 11277 36001 31013  40555  4633
    V41   10410  880  6506 12795  440 26241 33398 27976  24940  5686
    V43    5638 2200  7590 14313    0  9976 34483 29928  33832  6108
    V45   10843  440  8675 11711  440  7807 29278 24940  43375  4633
    V47    8675 1760  8891 13663    0  9108 38386 31230  33398  4633
    V49   10410 1760  9542 13880  440  8675 39051 31446  42507  5476
        .   .   .   .   .   .   .   .   .

我必须为同一图上的每一列绘制一个时间序列图。 代码如下:

    ts.plot(time,gpars= list(col=rainbow(10)))

图形的结果如下所示。单个图中的多个时间序列

使用 ggplot2 怎么样?

library(ggplot2)

dta <- data.frame(year = 2012,
    month = rep(seq(1,9),each=10),
    day = sample(seq(1,20),90,replace=T),
    Group = sample(c('A','B'),90,replace=T),
    Value = seq(1,90)
)

dta$Date <- apply(dta[,c('year','month','day')],1,paste,sep='',collapse='-')
dta$Date <- as.Date(dta$Date)

qplot(Date,Value,data=dta,geom='line',color=Group)

在您描述的情况下,我会按以下方式组装dta

dataset1$Group <- 'dataset1'
dataset2$Group <- 'dataset2'
dta <- rbind(dataset1,dataset2)
dta$Date <- as.Date(dta$Date)

以下对我有用。 假设您有两个时间序列向量 x1 和 x2,并且您想将它们叠加在一个图上。

library("tseries")    
comb_ts <- cbind(x1, x2) # please make sure the length of both your timeseries
plot.ts(comb_ts, plot.type = "single")

我得到以下情节 - 组合时间序列

希望这可以帮助!

如果您正在使用 xts 对象(如股票数据),您可以使用 higcharter 包。

 library(quantmod)
  sbi <- getSymbols("SBIN.BO", src="yahoo",auto.assign = F)
  rel <- getSymbols("RELIANCE.NS", src="yahoo",auto.assign = F)
  infy <- getSymbols("INFY.NS", src="yahoo",auto.assign = F)

  library(highcharter)
   highchart(type = "stock")  %>% 
   hc_add_series(sbi) %>% 
   hc_add_series(rel) %>% 
   hc_add_series(infy) %>% hc_title(text = "infy/sbi/rel")
1 如何在 R 中绘制叠加时间序列

我有一个包含以下数据的时间序列: 并想使用 ggplot 绘制重叠的时间序列图。 但是,当我这样做时,生成的时间序列图会失真,如下所示。 有人可以解释一下我做错了什么吗? 这是我用来生成以下图的代码: ...

2 绘制叠加时间序列

我要绘制四个时间序列,最好使用基础图形。 如您所见,两个系列中的一个始终是另一个系列的子集,并且系列a和b在开始时就非常相似,因此在一个具有这种特征的图中看起来并不好。 您对如何绘制此类数据有任何建议吗? 我不介意将所有内容都放在一个图中,但这不是必需的。 干杯。 ...

3 如何在R中绘制时间序列EVI

我正在使用R,我想创建一个EVI索引时间序列图,EVI索引与时间的关系,但是我想绘制区域内选定多边形(基于某些多边形中心的像素)。 就我的数据而言,我拥有5年的EVI(2000、2001、2005、2010),日期编码为年份,然后是年份。 对于我的shapefile,所有shapefil ...

2018-12-02 18:30:14 0 46   r
4 R:叠加时间序列

所以这个想法很简单,我想解决方案就在某个地方,但我就是找不到它。 我有 3 个年度时间序列,有每日值,我希望能够在同一个图中显示所有 3 年,其中 x 坐标是月份,y 坐标是每年的值。 ...

5 在R中绘制时间序列

我将一个csv文件读到R中,当我尝试用Years和Unemployment绘制时间序列时,我在名为V1的表上不断获得一个变量,该变量有11个条目。 但是我试图摆脱这种情况,因为这会导致在我最初打算绘制的曲线的基础上,将一条直线绘制到我的图形上(向下倾斜的一条曲线)。 到目前为止,我在R中输入的代码 ...

6 绘制R中的时间序列

我是R的新手。我在这个链接dropbox中有一组每日数据。 我的代码是: 这是结果: 问题是xlab ,我想显示DATE变量,但它似乎显示了CLOSE变量的顺序。 我还尝试了其他命令,如ggplot , xyplot等,但它们需要转换为data.frame ,这对我来说太 ...

7 在R中绘制时间序列

我正在处理数据,前两列是日期,第三列是符号,第四和第五列是价格。 所以,我创建了一个数据子集如下: 然后我尝试使用以下方法绘制时间序列图 好吧,它给了我一个散点图 - 不是我想要的。 所以,我尝试了plot(test.sub[1],test.sub[2]) ,现在我收到以下错 ...

9 如何在R中绘制多个因素的时间序列数据

我有以下形式的数据: 共有32个因素。 对于每个日期和时间,可以有多个因素和关联的值。 我希望比较每个因素的值的时间序列。 最好的方法是什么? 我使用了以下两种方法,但是它们不能产生令人满意的结果: 方法1: 情节: 方法2: 情节: 所 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM