[英]How to specify dates as x-axis labels in ggplot? Trying to match dates with 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.