0

我正在研究不同股票的时间序列,并且在有效地绘制它们时遇到了一些问题。

所以我的数据集看起来像这样:

              A       B       C       D
1/2/2012    0.007   0.012   0.015   0.009
1/3/2012    0.009   0.012   0.015   0.008
1/4/2012    0.012   0.012   0.015   0.009
1/5/2012    0.013   0.012   0.015   0.012
1/6/2012    0.013   0.012   0.015   0.011
1/9/2012    0.013   0.012   0.015   0.011
1/10/2012   0.013   0.009   0.015   0.011
1/11/2012   0.013   0.009   0.015   0.014
1/12/2012   0.013   0.009   0.015   0.014
1/13/2012   0.013   0.009   0.015   0.013
1/16/2012   0.013   0.012   0.014   0.017
1/17/2012   0.013   0.013   0.015   0.017
1/18/2012   0.014   0.013   0.015   0.018
1/19/2012   0.014   0.013   0.015   0.018
1/20/2012   0.015   0.012   0.015   0.018
1/24/2012   0.016   0.011   0.016   0.018
1/25/2012   0.016   0.011   0.016   0.019
1/26/2012   0.016   0.010   0.015   0.021
1/27/2012   0.016   0.010   0.015   0.022
1/30/2012   0.016   0.010   0.015   0.022
1/31/2012   0.016   0.010   0.015   0.022
2/1/2012    0.016   0.010   0.015   0.022
2/2/2012    0.020   0.012   0.015   0.025

现在,我手动绘制了所有的gX <- ggplot(dat, aes(Index, X)) + geom_line图,并通过grid.arrange(g1, g2, g3, g4)

有没有办法使用 facet_grid 绘制这些,因为我这样做的方式效率低下且死板?

下面是我手动绘制的图:

在此处输入图像描述

4

1 回答 1

3

假设您的 data.frame ABCD是股票名称,您必须首先创建一个如下形式的长表:

Date       Stock   value
1/2/2012   A       0.007
1/2/2012   B       0.012
1/2/2012   C       0.015
1/2/2012   D       0.009
1/3/2012   A       0.009
1/3/2012   A       0.012
1/3/2012   A       0.015
1/3/2012   A       0.008

我假设您的第一列是行名,并且必须将其作为列导入到您的数据框中。然后使用gatherfromtidyr创建长格式的数据框。

library(tidyr)
df$Date <- rownames(df)
long <- gather(df, Stock, value, -Date)
ggplot(aes(x=Date, y=Value)) + geom_line() + facet_wrap(~Stock, scales='free_y', ncol=5)

gather中,第一个参数第二个参数是将包含较早列名的列名,第三个参数是将包含其值的列名。下面的参数gather是选择要收集的列,在这种情况下,除了 Date(因为你有很多并且不想手动输入它们)。

于 2017-09-22T08:51:00.860 回答