ggplot2时间序列图,带有背景底纹

ThatQuantDude

我有一个要在R中创建的Excel图形。

Excel图表

我尝试用一​​些虚拟数据重新创建它

a<-rnorm(12)
a_ts<-ts(a, start=c(2015, 1), frequency=12)
a_time<-time(a_ts)
a_series<-ts.union(ret=a_ts, date=a_time)
a_series_df<-as.data.frame(a_series)

ggplot() +
geom_rect(data=data.frame(xmin=decimal_date(as.Date(c("2015-01-01"))),
xmax=decimal_date(as.Date(c("2015-05-31"))), ymin=-Inf, ymax=Inf),
aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax), fill="pink", alpha=0.5) +
geom_line(data = a_series_df, aes(x=date,y=ret, color='blue')) +
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.5)) 
#this does not work
#scale_x_date(breaks = "1 month", minor_breaks = "1 month",   labels=date_format("%B-%d")) +
#scale_y_continuous(labels = scales::percent)

看起来像这样

R版

我正在努力进行日期转换,并且还将x和y原点设置为零并正确设置了轴标签,最后两行代码适用于非日期数据点。我还想在图表下为series1,series2和阴影区域添加一个图例。

任何帮助,将不胜感激。

应用建议后进行更新:

X轴应该在y = 0处,其他一切都应保持不变,例如在excel中

史蒂夫

下面是一个示例,它可以帮助您充分了解这一点。这将使用该lubridate软件包来处理日期和时间(在这种情况下为日期)。这显示了一种方法,您可以使用大多数请求的修改在同一图上绘制两条单独的线。在此示例中alpha0.05使用的。

library(lubridate)
library(ggplot2)

### Set up dummy data.
dayVec     <- seq(ymd('2016-01-01'), ymd('2016-01-10'), by = '1 day')
set.seed(1234)
dayCount   <- length(dayVec)
dayValVec1 <- rnorm(dayCount)
dayValVec2 <- rnorm(dayCount)
dayDF      <- data.frame(Date = rep(dayVec, 2),
                         DataType = factor(c(rep('A', dayCount), rep('B', dayCount))),
              Value = c(dayValVec1, dayValVec2))

### Dummy data in data frame (DataType is a factor)
dayDF
##          Date DataType       Value
## 1  2016-01-01        A -1.20706575
## 2  2016-01-02        A  0.27742924
## 3  2016-01-03        A  1.08444118
## 4  2016-01-04        A -2.34569770
## 5  2016-01-05        A  0.42912469
## 6  2016-01-06        A  0.50605589
## 7  2016-01-07        A -0.57473996
## 8  2016-01-08        A -0.54663186
## 9  2016-01-09        A -0.56445200
## 10 2016-01-10        A -0.89003783
## 11 2016-01-01        B -0.47719270
## 12 2016-01-02        B -0.99838644
## 13 2016-01-03        B -0.77625389
## 14 2016-01-04        B  0.06445882
## 15 2016-01-05        B  0.95949406
## 16 2016-01-06        B -0.11028549
## 17 2016-01-07        B -0.51100951
## 18 2016-01-08        B -0.91119542
## 19 2016-01-09        B -0.83717168
## 20 2016-01-10        B  2.41583518

ggplot(dayDF, aes(Date, Value, colour = DataType)) +
    geom_line() +
    geom_rect(aes(xmin=ymd('2016-01-02'),
                  xmax = ymd('2016-01-06'),
                  ymin = -Inf,
                  ymax = Inf), fill = 'pink', alpha = 0.05) +
    scale_x_datetime(labels = date_format('%b-%d'), breaks = date_breaks('1 day'), expand=c(0,0)) +
    theme(axis.text.x     = element_text(angle=90),
          legend.position = 'bottom')

在此处输入图片说明

编辑

注意,如果要按月绘制,则date_breaks可以将值更改为1 month这个例子只是每天。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章