在ggplot中标记日期轴?

时间:2016-09-30 01:26:05

标签: r date ggplot2 label axis

我正在尝试使用R中的ggplot创建绘图,我遇到了与下面讨论的相同的问题。

Date axis labels in ggplot2 is one day behind

我的数据范围从2016-09-01到2016-09-30,但是地块中的标签表示2016-08-31是数据的第一天。 我用上一个问题解决了问题,即:

ggplot(df, aes(x, y)) + 
    geom_point() + 
    scale_x_datetime(breaks =df$x , labels = format(df$x, "%Y-%m-%d")) 

(这是通过从数据中获取确切日期来设置中断和标签吗?)

无论如何,我有一个新问题, 日期现在很好地匹配标签,但情节看起来不太好。

see my plot here

我不抱怨日期的长度太长,但我不喜欢我不能用上面的解决方案在一周或一定天数内设置休息和标签。 此外,我有很多错过的日期。

我该怎么做才能解决这个问题?我需要一个新的解决方案。

2 个答案:

答案 0 :(得分:2)

如果您希望日期垂直显示(这样您可以查看所有日期),请使用此选项:

ggplot(df, aes(x, y)) + 
geom_point() + 
scale_x_datetime(breaks =df$x , labels = format(df$x, "%Y-%m-%d")) +
theme(axis.text.x = element_text(angle=90, vjust = 0.5))

答案 1 :(得分:0)

我找到了解决方案......也许我的问题在这里没有详细描述。 我的解决方案是针对日期与轴上的值不匹配的情况,我想让情节看起来更好:

# set breaks first by seq.POSIXt
breaks.index <- seq.POSIXt(from=as.POSIXct(strftime("2020-01-01", format="%Y-%m-%d"), format="%Y-%m-%d"), to=as.POSIXct(strftime("2020-12-31", format="%Y-%m-%d"), format="%Y-%m-%d"), by="1 week")

# plot
plot <- ggplot(data, aes(x=date, y=y)
+scale_x_datetime(breaks = breaks.index, labels = format(breaks.index, "%Y-%m-%d"))
plot

虽然我不明白与使用scale_x_date(date_labels ='%F')有什么不同以及此代码如何工作,但它有效。