R-Facet_Wrap每n列在一起可能吗?图表2
R-Facet_Wrap every n columns together possible ? ggplot2
我正在写一个基于 Cointegration 的 Shiny App。
找到协整向量后,我使用 ggplot2
绘制了所有均值回复序列。我这样做的方法是将所有这些协整系列放在一个数据框中,然后将其融化,然后根据变量进行分面包装。
直到这里我都没有问题。
现在我想将移动平均线和移动标准差添加到每个协整序列的图中,但我找不到单独使用 MA 和 STD 的每个序列的方法。
我知道我现在所拥有的问题是我的方式 facet_wraping 但我不是一个有经验的用户所以我不知道如何解决它。现在我有:
我希望 Cointegration Series 1、MA series1 和 Std Series 1 在同一张图上,颜色不同,而 Cointegration Series 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 列放在一起?我应该以不同的方式融化吗?我需要解释更多才能更清楚吗?
编辑:
基本上用 Lehman 的术语来说,假设我有一个由列组成的数据框 df:
日期、S1、MA1、STD1、S2、MA2、STD2
我希望我的 x 轴是日期,并且我希望使用 ggplot2 在一个图上有 S1、MA1、STD1,在另一个图上有 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
现在够清楚了吗?
I want my x axis to be Date, and I want to have S1, MA1, STD1 on a plot and S2, MA2 and STD2 on another plot using ggplot2.
如果按如下方式重塑数据:
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)
这导致:
重塑数据:
有多种包可用于重塑数据,包括 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)
我正在写一个基于 Cointegration 的 Shiny App。
找到协整向量后,我使用 ggplot2
绘制了所有均值回复序列。我这样做的方法是将所有这些协整系列放在一个数据框中,然后将其融化,然后根据变量进行分面包装。
直到这里我都没有问题。
现在我想将移动平均线和移动标准差添加到每个协整序列的图中,但我找不到单独使用 MA 和 STD 的每个序列的方法。
我知道我现在所拥有的问题是我的方式 facet_wraping 但我不是一个有经验的用户所以我不知道如何解决它。现在我有:
我希望 Cointegration Series 1、MA series1 和 Std Series 1 在同一张图上,颜色不同,而 Cointegration Series 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 列放在一起?我应该以不同的方式融化吗?我需要解释更多才能更清楚吗?
编辑: 基本上用 Lehman 的术语来说,假设我有一个由列组成的数据框 df:
日期、S1、MA1、STD1、S2、MA2、STD2
我希望我的 x 轴是日期,并且我希望使用 ggplot2 在一个图上有 S1、MA1、STD1,在另一个图上有 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
现在够清楚了吗?
I want my x axis to be Date, and I want to have S1, MA1, STD1 on a plot and S2, MA2 and STD2 on another plot using ggplot2.
如果按如下方式重塑数据:
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)
这导致:
重塑数据:
有多种包可用于重塑数据,包括 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)