ggplot2中的日期轴标签落后一天

时间:2015-10-15 10:25:25

标签: r ggplot2

我正在尝试使用ggplot2scales库在R中的x轴上创建日期。问题是,当我使用命令scale_x_datetime(breaks = date_breaks(width = "1 day"), labels=date_format("%e. %b"))时,中断似乎没问题,但标签落后一天。因此,对于5月1日的数据点,标签是4月30日。

我想这是因为我使用了离散值的比例,它用于连续数据。无论如何,我怎样才能确保5月1日的标签说明5月1日?

enter image description here

library(ggplot2)
library(scales)

start <- "2015-05-01 00:00:00"
end <- "2015-05-10 00:00:00"

df <- data.frame(
  x = seq(as.POSIXct(start), as.POSIXct(end), by = "1 day"),
  y = runif(10, 0, 20)
)

ggplot(df, aes(x, y)) +
  geom_point() +
  scale_x_datetime(breaks = date_breaks(width = "1 day"), labels=date_format("%e. %b"))

在@Deena

的帮助下解决方案
breaks.index <- match(unique(format(df$x, "%d. %b")), format(df$x, "%d. %b"))

ggplot(df, aes(x, y)) + geom_point() + 
  scale_x_datetime(breaks = df$x[breaks.index],
  labels = format(df$x[breaks.index], "%e. %b")) 

1 个答案:

答案 0 :(得分:1)

老实说,我不知道为什么我们要在轴上获得30年4月。但下面是一个解决方法:

#works 
ggplot(df, aes(x, y)) + geom_point() + 
  scale_x_datetime(breaks = date_breaks(width = "day")) 

#doesn't work
ggplot(df, aes(x, y)) + geom_point() + 
  scale_x_datetime(breaks = date_breaks(width = "day") , labels = date_format("%d. %b")) 

#Work around
ggplot(df, aes(x, y)) + geom_point() + 
  scale_x_datetime(breaks =df$x , labels = format(df$x, "%d. %b"))