如何匹配ggplot2中重叠区域图中的图例颜色和绘图颜色

时间:2016-01-07 08:40:09

标签: r

我有以下数据:

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为变量revrepoggplot2绘制时间序列重叠区域图。

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

enter image description here

正如我们所看到的那样,两个变量的图例框中都显示了相同颜色的图例。我希望它显示正确的相应颜色,即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")

plot2

但是这给了我非正确的区域图和正确的传说....但我正在寻找重叠的区域图。

2 个答案:

答案 0 :(得分:0)

以下是基于融合/收集数据的想法的解决方案,使用fill中的ggplotposition = "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")

enter image description here