首页 > 解决方案 > 根据数据集中的位置对 ggplot 中的特定日期进行子集化

问题描述

我使用ggplot2. 我想知道是否有一种解决方案可以根据它们在我的数据集中的位置自动对我的xminxmax值进行子geom_rect集化,而不是手动填写日期。我希望始终将xmin数据集中的第 6 个最后日期观察xmax作为最后一个日期观察。同样,在scale_x_date序列中,我想将其设置为自动提取数据集中的第一个和最后一个日期。

ggplot(psce_data, aes(Date,`PSCE Growth`)) +
  geom_rect(aes(xmin = tail(date,1),
                xmax = as.Date('2020-12-01'),
                ymin = 0, ymax = 10), 
            fill = "red", alpha = 0.2) +
  geom_line(size = 1.2, col = '#75002B') +
  scale_x_date(breaks = seq(as.Date('2018-01-01'),as.Date('2020-12-01'),by = '6 months'), date_labels = '%b-%Y') +
  labs(y = 'Year-on-Year Growth (%)') +
  scale_y_continuous(breaks = seq(0,10,by = 2)) +
  theme_bw()

这是我的数据集的可复制品

structure(list(Date = structure(c(17532, 17563, 17591, 17622, 
17652, 17683, 17713, 17744, 17775, 17805, 17836, 17866, 17897, 
17928, 17956, 17987, 18017, 18048, 18078, 18109, 18140, 18170, 
18201, 18231, 18262, 18293, 18322, 18353, 18383, 18414, 18444, 
18475, 18506, 18536, 18567, 18597), class = "Date"), `PSCE Growth` = c(6.03806138152698, 
6.03809149124142, 6.01532602228477, 6.14343685180097, 5.72725741494446, 
5.71673506872114, 5.54860173966314, 6.78058899222803, 6.71018505753344, 
7.18229309747457, 7.35166052339761, 6.88491297221491, 6.39557440155487, 
6.04095268041736, 5.98793033021946, 7.0149065226691, 8.3391362577722, 
7.77825490464967, 7.52521947220078, 6.42564285250243, 6.52665779068081, 
6.42119590515603, 6.0627396381368, 7.17023911171296, 7.25116619687204, 
6.14998629821019, 6.10667340304004, 3.70834197649858, 2.18774730704022, 
2.82551654988927, 3.02881235983089, 2.70973404541919, 2.91094424831471, 
2.51635377656063, 2.85799109044056, 1.94656704508046)), row.names = c(NA, 
-36L), class = c("tbl_df", "tbl", "data.frame"))

标签: rggplot2

解决方案


您可以使用head(tail(Date, 6), 1)

ggplot(psce_data, aes(Date, `PSCE Growth`)) +
  geom_rect(aes(xmin = head(tail(Date, 6), 1),
                xmax = tail(Date, 1),
                ymin = 0, ymax = 10), 
            fill = "red", alpha = 0.2) +
  geom_line(size = 1.2, col = '#75002B') +
  scale_x_date(breaks = seq(head(psce_data$Date, 1), 
                            tail(psce_data$Date, 1),
                            by = '6 months'), date_labels = '%b-%Y') +
  labs(y = 'Year-on-Year Growth (%)') +
  scale_y_continuous(breaks = seq(0, 10, by = 2)) +
  theme_bw()

在此处输入图像描述


推荐阅读