我有以下数据:
head(MP_rates_dateformat)
Month repo revrepo bankrate CRR Callrate WPI GDP FED
1 2001-04-01 9.00 6.75 7 8.0 7.49 5.41 4.6 4.50
2 2001-05-01 8.75 6.50 7 7.5 8.03 5.60 4.6 4.00
3 2001-06-01 8.50 6.50 7 7.5 7.24 5.30 4.6 3.75
4 2001-07-01 8.50 6.50 7 7.5 7.19 5.23 5.3 3.75
5 2001-08-01 8.50 6.50 7 7.5 6.94 5.41 5.3 3.50
6 2001-09-01 8.50 6.50 7 7.5 7.30 4.52 5.3 3.00
我正在尝试使用repo
为变量revrepo
和ggplot2
绘制时间序列重叠区域图。
p2 <- ggplot(MP_rates_dateformat, aes(x= Month)) + geom_area(aes(y=repo, color="repo"), fill="yellowgreen") + geom_area(aes(y=revrepo,color="revrepo"), fill="dodgerblue", alpha=0.7, linetype="dotted") + labs(color="")+ labs(title="Overlapping - Repo & Reverse Repo")
p2
正如我们所看到的那样,两个变量的图例框中都显示了相同颜色的图例。我希望它显示正确的相应颜色,即repo
的黄绿色和revrepo
的dodgerblue。
假设我将数据熔化为:
df <- reshape2::melt(MP_rates_dateformat[, c("Month", "repo", "revrepo")], id="Month")
head(df, 3)
Month variable value
1 2001-04-01 repo 9.00
2 2001-05-01 repo 8.75
3 2001-06-01 repo 8.50
p1 <- ggplot(df, aes(x=Month)) + geom_area(aes(y=value, fill=variable)) + labs(title="Non-Overlapping - Repo & Reverse Repo")
但是这给了我非正确的区域图和正确的传说....但我正在寻找重叠的区域图。
答案 0 :(得分:0)
以下是基于融合/收集数据的想法的解决方案,使用fill
中的ggplot
与position = "identity"
相结合。请注意,列的顺序很重要,因为最小值revrepo
应该在第一个repo
之后绘制。
library("tidyr")
df_gather <- gather(select(MP_rates_dateformat, 1:3), variable, value, -Month)
library("ggplot2")
ggplot(data = df_gather, aes(x = Month)) +
geom_area(aes(y = value, fill = variable), position = "identity")
答案 1 :(得分:0)
终于明白了!
library("tidyr")
long_DF<- MP_rates_dateformat[,1:3] %>% gather(variable, value, -Month)
head(long_DF)
Month variable value
1 2001-04-01 repo 9.00
2 2001-05-01 repo 8.75
3 2001-06-01 repo 8.50
4 2001-07-01 repo 8.50
5 2001-08-01 repo 8.50
6 2001-09-01 repo 8.50
library("ggplot2")
ggplot(data = long_DF, aes(x = Month)) +
geom_area(aes(y = value, fill = variable), position = "identity") + labs(fill="") + xlab('\nYears') + ylab('LAF Rates (%)\n') + labs(title="Overlapping - Repo & Reverse Repo\n")