Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过带有ggplot2的scale_x_date()创建带有月份x轴的年与年绘图_R_Ggplot2_Lubridate - Fatal编程技术网

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