R 在ggplot2中使用虚拟变量高亮显示时段

R 在ggplot2中使用虚拟变量高亮显示时段,r,ggplot2,highlight,dummy-variable,R,Ggplot2,Highlight,Dummy Variable,我有两个时间序列收益率和外汇以及一个虚拟货币。如何在ggplot中绘制两个系列并高亮显示(着色)假人为1的区域?下面数据集的标题 date dummy yield fx 1/1/1990 0 10.029 1.261184049 1/2/1990 0 10.036 1.261008068 1/3/1990 0 10.119 1.258932591 1/4/1990 0 10.02 1.261410528 1/5/1990 0

我有两个时间序列收益率和外汇以及一个虚拟货币。如何在ggplot中绘制两个系列并高亮显示(着色)假人为1的区域?下面数据集的标题

date    dummy   yield   fx
1/1/1990    0   10.029  1.261184049
1/2/1990    0   10.036  1.261008068
1/3/1990    0   10.119  1.258932591
1/4/1990    0   10.02   1.261410528
1/5/1990    0   10.013  1.261586847
1/6/1990    1   10.066  1.260255526
1/7/1990    1   10.057  1.260481006
1/8/1990    1   10.057  1.260481006
1/9/1990    1   10.067  1.260230488
1/10/1990   1   10.186  1.257272051
我用类似于下面代码的rect进行了尝试,但没有成功

ggplot(dummies, aes(date)) + 
geom_line(aes(y = yield, colour = "yield")) + 
geom_line(aes(y = fx, colour = "fx")) +
geom_rect(aes(xmin=-Inf, xmax=Inf, ymin=0, ymax=1),
          colour=alpha("grey20", 0.5), fill.alpha=0.5)
非常感谢您的帮助。谢谢。

试一试:

library(tidyr)

dummies2<- gather(dummies, key="type", value="value", c("yield", "fx"))

ggplot(dummies2, aes(x=date, y=value, colour=type, group=type)) + 
  geom_segment(aes(y=-Inf, yend=Inf,x=date, xend=date, alpha=dummy),inherit.aes = F,colour="black", size=5)+
               scale_alpha_continuous(range=c(0,0.3))+
  guides(alpha=F)+
  geom_line()
library(tidyr)

dummies2如果你只有这一个需要着色的周期,我只会使用
注释
。否则,您可以使用
geom_rect
的一些方法来提取唯一的日期

我将日期列转换为日期对象,以获得更好的格式,并能够使用
min
max
等函数。然后,虚拟数据位于一个单独的数据框中,该数据框对观察值进行过滤,其中
dummy==1
,并且日期是
dummy==1
日期中的第一个或最后一个。这使得注释的
xmin
xmax
。我将注释的
ymin
设置为0,但您可以将其设置为对数据有意义的任何值

我也看到了你上面关于需要网格线可见的评论,所以我使用了
theme\u light
。如果有问题,可以更改网格线的颜色

库(tidyverse)
#主数据帧
df%
读取表格2()%>%
突变(日期2=lubridate::mdy(日期))%>%
聚集(关键=度量,价值=价值,收益率,外汇)
头部(df)
#>#tibble:6 x 5
#>日期虚拟日期2度量值
#>                
#>1990年1月1日产量10.0
#>1990年1月2日产量10.0
#>3 1/3/1990 0 1990-01-03收益率10.1
#>4 1/4/1990 0 1990-01-04收益率10.0
#>5 1/5/1990 0 1990-01-05收益率10.0
#>6 1/6/1990 1 1990-01-06收益率10.1
#虚拟数据帧:虚拟==1,仅限最小和最大日期
虚拟%
过滤器(虚拟==1)%>%
筛选器(日期2%在%c中(最小值(日期2),最大值(日期2))%>%
选择(虚拟,日期2)%>%
唯一的()
ggplot(df,aes(x=date2,y=value,color=measure))+
注释(geom=“rect”,xmin=min(伪$date2),xmax=max(伪$date2),ymin=0,ymax=Inf,fill=“gray”,alpha=0.4)+
geom_线()+
主题灯()


2018年4月18日由(v0.2.0)创建。

现在的问题是,它填充了虚拟为一的时段,因此其他行(收益率和外汇)不再可见。颜色越浅越好。它似乎绘制了第二层。你知道我们如何解决这个问题吗?只需将geom_线和geom_段的顺序颠倒即可。每个单独的元素都是按调用顺序绘制的。这看起来好多了,谢谢。然而,我认为它并没有对特定区域进行着色,而是将其完全填充,以便图表中的网格线消失。是否有其他方法使其只突出背景?网格线仍然存在,尽管很难看到。像这样更改alpha值的范围,使背景更加可见缩放alpha连续(范围=c(0,0.15)),但仍然看不到网格线。即使将其降至0.05或选择不同的颜色。还有什么我可以试试的吗?提前谢谢。