gpt4 book ai didi

r - 带背景阴影的 ggplot2 时间序列图

转载 作者:行者123 更新时间:2023-12-04 16:15:15 24 4
gpt4 key购买 nike

我有一个要在 R 中创建的 excel 图表。

Excel Chart

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

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 version

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

如有任何帮助,我们将不胜感激。

应用建议后更新:

X axis should be at y = 0 everything else should stay as it is, as in the excel

最佳答案

下面是一个示例,应该可以帮助您了解大部分内容。这使用 lubridate 包来处理日期和时间(在本例中为日期)。这向您展示了一种方法,您可以在同一图上绘制两条单独的线,并进行大部分请求的修改。在此示例中,使用了 0.05alpha

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')

enter image description here

编辑

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

关于r - 带背景阴影的 ggplot2 时间序列图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36668078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com