如何使用ggplot2在单个变量上映射不同类型的几何

时间:2018-03-29 14:24:35

标签: r ggplot2

我使用ggplot2制作了这张图:

enter image description here

我希望将“InterésReal”时间序列改为geom_bar()而不是一行。我尝试使用以下代码单独绘制我的每个系列:

ggOjb=ggplot(base)+geom_line(aes(x=periodo,y=tasa))+
  geom_line(aes(x=periodo,y=inflacion))+
  geom_bar(aes(x=periodo,y=real2),stat="identity",alpha=.7)+
  geom_hline(yintercept=0,linetype=2,size=1)

我得到了这个:

enter image description here

这几乎是我想要的。但我还想保留这些指南。因此,我想知道如何将变量映射到几何类型。

提前谢谢!我希望我很清楚。

1 个答案:

答案 0 :(得分:2)

您可以将数据从宽到长重新整形,然后在每个geom中使用不同的数据框。

library(tidyr)
df <- data.frame(Time = 1:25, A = rnorm(25), B = rnorm(25), C = rnorm(25)*1.5)

df %>% 
  gather("Series", "Value", - Time) -> df

ggplot() + 
  geom_bar(data = df %>% filter(Series == "C"),  aes(x=Time, y=Value, fill = "SeriesA"), stat="identity") +
  geom_line(data = df %>% filter(Series == "A"), aes(x=Time, y=Value, col = "SeriesB")) +
  geom_line(data = df %>% filter(Series == "B"), aes(x=Time, y=Value, col = "SeriesC")) +
  geom_hline(yintercept=0,linetype=2,size=1) +
  scale_colour_manual(name = "Series A and B", values = c("SeriesB" = "blue", "SeriesC" = "green")) +
  scale_fill_manual(name = "Series C", values = c("SeriesA" = "grey"))

enter image description here