0

我从时间序列创建了一个流图,需要两条垂直线分别标有“点燃”和“熄灭”文本。

鉴于这是一个时间序列,我在显示标签时遇到了真正的问题。

这是迄今为止的ggplot代码:

ggplot(airDataClean, aes(x = Date, y = maxParticulates, fill = Location)) +
   geom_vline(aes(xintercept = as.numeric(ymd("2019-10-26"))), color='red') +
   geom_vline(aes(xintercept = as.numeric(ymd("2020-02-10"))), color='blue') + 
   geom_stream(color = 1, lwd = 0.25) +
   theme(axis.text.y = element_blank(), axis.ticks.y  = element_blank()) +
   scale_fill_manual(values = cols) +
   scale_x_date(expand=c(0,0)) +
   ylab("Particulate Pollution (index of poor air quality)") +
   xlab("Black Summer 19/20")

结果显示:

流图

标记我尝试过的第一行:

annotate(aes(xintercept= as.numeric(ymd("2019-10-26"))),y=+Inf,label="Ignite",vjust=2,geom="label") +

但它抛出

“错误:输入无效:date_trans 仅适用于 Date 类的对象”

任何帮助将不胜感激。

4

1 回答 1

1

您的有多个问题annotate

  1. annotate没有映射参数。因此,使用aes(...)会导致错误,因为它(按位置)传递给x参数。由于aes(...)不会返回类的对象,Date因此会引发错误。

  2. 当您要添加标签时,请使用x而不是xintercept. geom_label. 没有xintercept审美。

  3. 无需将日期包装在as.numeric.

使用ggplot2::economics数据集作为示例数据,您可以像这样标记垂直线:

library(ggplot2)
library(lubridate)

ggplot(economics, aes(x = date, y = uempmed)) +
  geom_vline(aes(xintercept = ymd("1980-10-26")), color = "red") +
  geom_vline(aes(xintercept = ymd("2010-02-10")), color = "blue") +
  geom_line(color = 1, lwd = 0.25) +
  scale_x_date(expand = c(0, 0)) +
  annotate(x = ymd("1980-10-26"), y = +Inf, label = "Ignite", vjust = 2, geom = "label") +
  annotate(x = ymd("2010-02-10"), y = +Inf, label = "Ignite", vjust = 2, geom = "label")

于 2022-01-16T09:09:09.997 回答