2

我有这张图

Month2 <- c("Oct 20", "Nov 20", "Dec 20", "Dec 20", "Jan 21", "Feb 21", "Mar 21", "Apr 21", "May 21", "Jun 21")

Forcast_data <- data.frame(
  "Month" = c("Oct 20", "Nov 20", "Dec 20", "Dec 20" ,"Jan 21", "Feb 21", "Mar 21", "Apr 21", "May 21", "Jun 21"),
  "Value" = c(68,47,55, 55, 105, 95,75, 65,60,105),
  "Type" = c("Actual", "Actual", "Actual", "Forecast", "Forecast","Forecast","Forecast","Forecast","Forecast","Forecast")
)

ggplot(Forcast_data, aes(Month2,Value, color=factor(Type))) + 
  geom_line(aes(group = 1)) + 
  geom_point() + 
  scale_x_discrete(limits = Month2) +
  scale_color_manual(values = c("dodgerblue", "orange")) +
  scale_size_manual(values = c(1, 2)) +
  labs(x = "Month") + theme(legend.title = element_blank()) + theme_minimal())

我的目标是在“12 月 20 日”和“1 月 21 日”之间添加一条虚线来表示新的一年。

我只是不知道如何手动设置我的 xintercept。此外,我同时拥有 12 月 20 日的实际和预测的原因是因为我将此图形包装在 plotly() 中,如果我不这样做,它会将线条分开。我不确定是否有其他解决方案。

在此处输入图像描述

4

1 回答 1

2

关于您的代码的一些问题:您Month2在图表中指定了一个组件,但您是从数据帧映射的Forcast_data,似乎这只是一个参考,所以我建议放弃它。

lubridate然后,我使用包将您的日期更改为实际日期:

Forcast_data %>% 
  mutate(day = 1) %>% 
  unite(., "date", c(Month, day), sep = "-") %>% 
  mutate(date = myd(date)) -> Forcast_data

最简单的方法是创建一个day列,然后将它们组合起来,然后lubridate用来变成一个日期。

然后我删除了:

 #scale_x_discrete(limits = date) +
  #scale_color_manual(values = c("dodgerblue", "orange")) +
  #scale_size_manual(values = c(1, 2)) +

我不确定它增加了什么价值。至少在ggplot方面。然后用于geom_vline()添加您的行:

ggplot(Forcast_data, aes(date,Value, color=factor(Type))) + 
  geom_line(aes(group = 1)) + 
  geom_point() + 
  geom_vline(xintercept = as.numeric(as.Date("01/01/2021", format = "%m/%d/%Y"))) +
  labs(x = "Month") + theme(legend.title = element_blank()) + theme_minimal()

产生了 图表输出

于 2020-12-30T23:54:04.080 回答