R 通过带有ggplot2的scale_x_date()创建带有月份x轴的年与年绘图
考虑以下数据:R 通过带有ggplot2的scale_x_date()创建带有月份x轴的年与年绘图,r,ggplot2,lubridate,R,Ggplot2,Lubridate,考虑以下数据: library(ggplot2) library(lubridate) date <- seq.Date(ymd("2015-01-01"), Sys.Date(), by = "day") df <- data.frame(date = date, value = seq_along(date) + rnorm(length(date), sd = 100)) # Add yday and year df$yday <-
library(ggplot2)
library(lubridate)
date <- seq.Date(ymd("2015-01-01"), Sys.Date(), by = "day")
df <- data.frame(date = date,
value = seq_along(date) + rnorm(length(date), sd = 100))
# Add yday and year
df$yday <- yday(df$date)
df$year <- year(df$date)
head(df)
# date value yday year
# 1 2015-01-01 97 1 2015
# 2 2015-01-02 89 2 2015
# 3 2015-01-03 68 3 2015
# 4 2015-01-04 57 4 2015
# 5 2015-01-05 70 5 2015
# 6 2015-01-06 100 6 2016
但这导致x轴是“一年中的某一天”,而不是月份标签。添加+scale\u x\u date()
失败,因为yday
不再是日期
可以使用缩放x\u日期()
?
最后,我想做如下事情:
ggplot(df, aes(x = date, y = value, color = factor(year))) +
geom_line() +
scale_x_date(date_labels = "%b")
但是要将年份“叠加”在同一个图上。这个破解方法怎么样:我们不关心
yday
来自哪一年,所以只要将它转换回日期格式(在这种情况下,年份总是1970年,而不管给定的yday
来自哪一年)并仅显示x轴标签的月份
您实际上不需要向数据框中添加yday
或year
列,因为您可以在ggplot调用中动态创建它们
ggplot(df, aes(x = as.Date(yday(date), "1970-01-01"), y = value,
color = factor(year(date)))) +
geom_line() +
scale_x_date(date_breaks="months", date_labels="%b") +
labs(x="Month",colour="") +
theme_bw()
可能有一个更干净的方法,希望有人更熟练的R日期来提供它
我想您不想使用您的问题答案中给出的解决方法?也许可以澄清一下这有什么不同,否则它看起来像是重复的。我喜欢它,但如果我们需要比较9-4月(包括一年的变化),我们该怎么做。有了这个解决方案,我们在中间得到了一个丑陋的缺口和错误的订单(Jo.APR;SEP DEC)。隐马尔可夫模型。。。。
ggplot(df, aes(x = as.Date(yday(date), "1970-01-01"), y = value,
color = factor(year(date)))) +
geom_line() +
scale_x_date(date_breaks="months", date_labels="%b") +
labs(x="Month",colour="") +
theme_bw()