在轴上更改日期顺序

时间:2015-04-16 15:20:32

标签: r

我总是对此感到厌烦,所以我觉得现在是时候问一些帮助......

我尝试制作一个可重复的示例,但由于某种原因,我无法以%m-%d格式获得我的x $ monthday :(。

x<-data.frame(seq(as.POSIXct('2012-10-01'), as.POSIXct('2015-03-01'), by= "day"))
names(x)<- "date"
x$month<- months(x$date)
x$monthday<- as.POSIXct(x$date, format= "%m-%d")
x1<- x[x$month== 'October' |x$month== 'November' | x$month== 'December' |x$month== 'January'|x$month== 'February', ]
y<- 1: nrow(x1)
x2<-cbind(x1, y)
x3<- aggregate(list(y=x2$y), list(monthday=x2$monthday), mean)
plot(x3$monthday, x3$y)

日期的格式为%m /%d,是10月至3月的时间序列。 R从1月到12月精美地命令轴,这导致两者之间存在很大差距,因为我的数据范围从10月到3月。

如何在十月到三月的表格中制作我的x轴顺序?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

library(dplyr)
library(ggplot2)
library(lubridate)

# Fake data
dat <- data.frame(date=seq(as.POSIXct('2012-10-01'), as.POSIXct('2015-03-01'), by="day"))
set.seed(23)
dat$temperature = cumsum(rnorm(nrow(dat)))

# Subset to October - March
dat <- dat[months(dat$date) %in% month.name[c(1:2,10:12)], ]

# Calculate mean daily temperature
dat = dat %>% group_by(Month=month(date), Day=day(date)) %>%
  summarise(dailyMeanTemp = mean(temperature)) %>%
  mutate(newDate = as.Date(ifelse(Month %in% 10:12, 
                            paste0("2014-", Month, "-", Day),
                            paste0("2015-", Month, "-", Day))))

上面的mutate函数创建了一个假年,只是为了让我们可以将日期保留在&#34; date&#34;格式并从10月到3月订购。可能有更好的方法(可能是zooxts包中的函数),但这似乎有效。

ggplot(dat, aes(newDate, dailyMeanTemp)) +
  geom_line() + geom_point() +
  labs(y="Mean Temperature", x="Month")

enter image description here

或者,在基础图形中:

plot(dat$newDate, dat$dailyMeanTemp)