如何在ggplot中的数据框中按日期标记xaxis?

时间:2017-02-03 20:17:10

标签: r ggplot2

我无法弄清楚如何标记x轴以对应点。 X表示4个日期,我希望月日(例如,' 8月27日')格式显示为x标签。

提前感谢您的帮助!

代码:

ggplot(day28.long,aes(x=day,y=movement))+
 geom_point(aes(colour=Horse))+
  geom_line(aes(colour=Horse))

数据的结构是:

str(day28.long)
'data.frame':   60 obs. of  3 variables:
 $ day     : Date, format: "2016-08-27" "2016-09-24" "2016-10-22" "2016-11-19" ...
 $ Horse   : chr  "42012" "42012" "42012" "42012" ...
 $ movement: int  418 291 255 123 314 270 271 141 444 471 ...

Plot where x labels aren't matched to points

1 个答案:

答案 0 :(得分:1)

默认情况下,ggplot2使用scale_x_date()scale_y_date()来代替Date个班级。刻度线和网格线放置在“漂亮”的日期,例如1个 st 和15个 th 的一个月。缩放不关心数据中的特定日期。

但是,scale_*_date()有两个参数可以自定义中断和标签。

ggplot(day28.long,aes(x=day, y=movement, colour=Horse, group = Horse)) +
  geom_point() +
  geom_line() +
  scale_x_date(breaks = unique(day28.long$day),
               date_labels = "%b %d"
  )

enter image description here

breaks取自day列。

默认情况下,标签会以YYYY-mm-dd格式显示。因此,参数date_labels = "%b %d"告诉ggplot2如何在轴上显示日期。

请注意,%b是此平台当前区域设置缩写的月份名称(请参阅?strptime)。这就是 Okt 22 打印在图表中而不是 Oct 22 的原因。

数据

不幸的是,OP没有为可重现的例子提供数据。所以,我不得不制作一些样本数据。

day28.long <- data.frame(
  day = as.Date(rep(c("2016-08-27", "2016-09-24", "2016-10-22", "2016-11-19"), 2)),
  Horse = rep(c("42012", "42013"), each = 4),
  movement = as.integer(c(418, 291, 255, 123, 314, 270, 271, 141)),
  stringsAsFactors = FALSE)

str(day28.long)
#'data.frame':  8 obs. of  3 variables:
# $ day     : Date, format: "2016-08-27" "2016-09-24" "2016-10-22" ...
# $ Horse   : chr  "42012" "42012" "42012" "42012" ...
# $ movement: int  418 291 255 123 314 270 271 141