使用 facet grid 绘制多个图表

plotting multiple charts using facet grid

我正在处理不同股票的时间序列,但在有效绘制它们时遇到了一些问题。

所以我的数据集如下所示:

              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 绘制这些图,因为我这样做的方式效率低下且死板?

下面是我手动画的图:

假设你的data.frame、ABCD都是股票名称,你必须先创建一个long-table 的以下形式:

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

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

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 的以下参数是 select 要收集的列,在这种情况下,它是所有 除了 Date (因为你有很多并且不会不想费心手动输入它们)。