繁体   English   中英

当我的 x 轴是一个因素时,如何手动添加 geom_vline()? R 图表

[英]How to manually add a geom_vline() when my x-axis is a factor? R ggplot

我有这个图形

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() 中,如果我不这样做,它会将线条分开。 我不确定是否有其他解决方案。

在此处输入图像描述

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

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

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

产生了图形输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM