R-Facet_Wrap每隔n列可以组合在一起吗? GGPLOT2

时间:2017-12-30 15:47:33

标签: r ggplot2 facet-wrap

我正在写一个基于协整的闪亮应用程序。

在找到协整向量后,我使用ggplot2绘制了所有均值回复系列。我这样做的方法是将所有这些协整系列放在一个数据框中,然后将其融合,然后根据变量进行换行。

直到这里我没有问题。

enter image description here

现在我想将移动平均值和移动标准偏差添加到每个协整序列的图中,但我找不到单独使用MA和STD的每个系列的方法。

我知道我现在所遇到的问题是我面对的问题,但我不是一个有经验的用户,所以我不知道如何解决它。现在我有:

enter image description here

我希望Cointegration系列1,MA系列1和标准系列1在同一图表上,并且对于Cointegration系列2具有不同的颜色和相同的颜色.... 我使用的代码是:

 m= melt(DF, id.vars = "Date") # melt the df

ggplot(m, aes(x = Date, y = value, colour = variable, group=variable)) +geom_line() + facet_wrap( ~ variable) # plot

有没有办法将前3列包装在一起?我应该以不同的方式融化吗?我需要解释更清楚吗?

编辑: 基本上在雷曼兄弟的术语中假设我有一个由列组成的数据帧df:

日期,S1,MA1,STD1,S2,MA2,STD2

我希望我的x轴是Date,我希望在绘图上有S1,MA1,STD1,在另一个图上使用ggplot2有S2,MA2和STD2。作为id,我将S1,MA1,STD1组合在一起,然后S2,MA2,STD2也在一起

假设这是DataFrame:

        Date           S1           M1          ST1         S2          M2        ST2
1 02/12/1999 -0.000217052  0.002862195 -0.002390842  2.2025825 -1.17258213 -0.3057015
2 03/12/1999 -0.004882038 -0.015920939 -0.007014382 -0.4040079 -0.69496488  0.1000167
3 06/12/1999 -0.001445954  0.005077610  0.000000000  1.1573779 -1.64268166 -0.3847015
4 07/12/1999 -0.000907952 -0.005403168  0.002027728 -0.3165827 -1.16466940 -1.0113501
5 08/12/1999  0.000881220  0.011375226 -0.013524439  0.5154455 -0.51725208  1.0942177
6 09/12/1999  0.001043752  0.013400502  0.017033342  1.9368608 -0.05587143  0.5203337

现在已经足够清楚了吗?

1 个答案:

答案 0 :(得分:0)

  

我希望我的x轴是Date,我希望在绘图上使用S1,MA1,STD1,使用ggplot2在另一个绘图上使用S2,MA2和STD2。

如果您按如下方式重塑数据:

         Date  S variable        value
1  02/12/1999 S1    value -0.000217052
2  03/12/1999 S1    value -0.004882038
3  06/12/1999 S1    value -0.001445954
4  07/12/1999 S1    value -0.000907952
5  08/12/1999 S1    value  0.000881220
6  09/12/1999 S1    value  0.001043752
7  02/12/1999 S2    value  2.202582500
8  03/12/1999 S2    value -0.404007900
9  06/12/1999 S2    value  1.157377900
10 07/12/1999 S2    value -0.316582700
11 08/12/1999 S2    value  0.515445500
12 09/12/1999 S2    value  1.936860800
13 02/12/1999 S1     mavg  0.002862195
14 03/12/1999 S1     mavg -0.015920939
15 06/12/1999 S1     mavg  0.005077610
16 07/12/1999 S1     mavg -0.005403168
17 08/12/1999 S1     mavg  0.011375226
18 09/12/1999 S1     mavg  0.013400502
19 02/12/1999 S2     mavg -1.172582130
20 03/12/1999 S2     mavg -0.694964880
21 06/12/1999 S2     mavg -1.642681660
22 07/12/1999 S2     mavg -1.164669400
23 08/12/1999 S2     mavg -0.517252080
24 09/12/1999 S2     mavg -0.055871430
25 02/12/1999 S1   stddev -0.002390842
26 03/12/1999 S1   stddev -0.007014382
27 06/12/1999 S1   stddev  0.000000000
28 07/12/1999 S1   stddev  0.002027728
29 08/12/1999 S1   stddev -0.013524439
30 09/12/1999 S1   stddev  0.017033342
31 02/12/1999 S2   stddev -0.305701500
32 03/12/1999 S2   stddev  0.100016700
33 06/12/1999 S2   stddev -0.384701500
34 07/12/1999 S2   stddev -1.011350100
35 08/12/1999 S2   stddev  1.094217700
36 09/12/1999 S2   stddev  0.520333700

然后你可以得到你想要的情节如下:

ggplot(df, aes(x=Date)) + geom_line(aes(y=value, group=variable, colour=variable)) + facet_wrap(~ S)

结果是:

enter image description here

重塑数据:

有各种各样的软件包可用于重塑数据,包括tidyr,reshape2等。我还在学习如何使用这些软件,但这是我重塑它的复杂方式。我确信有些人可以更有效地做到这一点。 :)

# read the original data
df <- read.table("/tmp/table.dat")

# separate s1 and s2
df.s1 <- df[,1:4]
df.s2 <- df[,c(1,5:7)]

# convert s1 and s2 to long form
df.s1.melted <- melt(df.s1, id.vars=c("Date","M1","ST1"))
df.s2.melted <- melt(df.s2, id.vars=c("Date","M2","ST2"))

# rename columns of s1 and s2 so they can be combined with rbind
s1 <- setNames(df.s1.melted, c("Date", "mavg", "stddev", "S", "value"))
s2 <- setNames(df.s2.melted, c("Date", "mavg", "stddev", "S", "value"))

# combine s1 and s2 with rbind then convert mavg, stddev and value to long form
df <- melt(rbind(s1, s2), id.vars=c("Date", "S"))

# plot it
ggplot(df, aes(x=Date)) + geom_line(aes(y=value, group=variable, colour=variable)) + facet_wrap(~ S)