时间轴上刻度子集的日期格式

Posted

技术标签:

【中文标题】时间轴上刻度子集的日期格式【英文标题】:Date format for subset of ticks on time axis 【发布时间】:2014-08-25 12:25:11 【问题描述】:

问题

我想格式化我的 X 轴(时间),以便清楚地看到周末。我想显示日期和星期几。

现状

我用(下面的完整代码)来做这个

scale_x_date(breaks=myData$timestamp, 
  labels=paste(
    substr(format(myData$timestamp, "%a"),1,1),
    format(myData$timestamp, "%d"),
    sep="\n")
)

这给了我

通缉情况

我宁愿用一个字母的缩写来表示工作日,因为那里有点紧。另外,我想把星期天(真的是节假日)涂成红色。这就是我的意思(用 GIMP 制作)。请注意如何使用添加第一个星期一和最后一个星期五

scale_x_date(breaks = "1 day", 
  minor_breaks = "1 days", 
  labels = date_format("%a\n%d"),
  name="")

但是,我得到了一个工作日的三个字母缩写,我在 GIMP 中删除了它。

这里是这个例子的完整代码。

library(ggplot2)
library(scales)
library(reshape2)

minimumTime <- as.Date("2014-07-01")
maximumTime <- as.Date("2014-07-31")

x <- seq(minimumTime,maximumTime, by="1 day")
y1 <- sin(as.numeric(x)/3)
y2 <- cos(as.numeric(x)/3)

myData <- data.frame(timestamp=x, y1=y1, y2=y2)
myData <- melt(myData, id.vars="timestamp")

rects <- data.frame(saturdays=myData[weekdays(myData$timestamp) == "Saturday","timestamp"]-0.5, sundays = myData[weekdays(myData$timestamp) == "Saturday","timestamp"]+1.5)

myPlot <- ggplot() +
    geom_rect(data=rects, aes(xmin=saturdays, xmax=sundays,ymin=-Inf, ymax=Inf), alpha=0.1) +
    geom_line(data=myData, aes(x=timestamp, y=value, colour=variable,size=1)) + 
    geom_point(data=myData, aes(x=timestamp, y=value, colour=variable,size=2)) +
    scale_x_date(breaks=myData$timestamp, labels=paste(substr(format(myData$timestamp, "%a"),1,1),format(myData$timestamp, "%d"),sep="\n")) +
    #scale_x_date(breaks = "1 day", minor_breaks = "1 days", labels = date_format("%a\n%d"), name="")  +
    scale_size_continuous(range = c(1.5,5), guide=FALSE)

总结一下:

有没有办法用另一种颜色为特定的中断着色? 有没有办法手动更改标签并在星期一和 在这种情况下,星期五在开始和结束? 另外,如果有办法让每个标签的行居中,那就是 太棒了:)

谢谢!

【问题讨论】:

【参考方案1】:

您也可以使用breaks="1 day" 参数将自定义格式器用于标签,您只需在labels=replace myDate$timestamp 之后使用function(x)x。这也将解决第三个问题。

 + scale_x_date(breaks="1 day", 
      labels= function(x) paste(substr(format(x, "%a"),1,1),format(x, "%d"),sep="\n")) 

或者您可以将您的转换作为单独的函数,然后将其用于labels=

my_date_trans<-function(x) 
      paste(substr(format(x, "%a"),1,1),format(x, "%d"),sep="\n")


+ scale_x_date(breaks="1 day",labels=my_date_trans)

要更改标签的颜色,您应该使用theme()axis.text.x=。在这里,我使用包含 6 次黑色和红色的颜色矢量,因为您的比例从星期一开始。然后重复这些颜色。

ggplot() +
      geom_rect(data=rects, aes(xmin=saturdays, xmax=sundays,ymin=-Inf, ymax=Inf), alpha=0.1) +
      geom_line(data=myData, aes(x=timestamp, y=value, colour=variable,size=1)) + 
      geom_point(data=myData, aes(x=timestamp, y=value, colour=variable,size=2)) +
      scale_x_date(breaks="1 day",labels=my_date_trans)+
      scale_size_continuous(range = c(1.5,5), guide=FALSE)+
      theme(axis.text.x=element_text(color=c(rep("black",6),"red")))

【讨论】:

嘿,太好了!谢谢!它没有回答颜色问题,但我真的很喜欢它! 写得很好的答案,干净的解决方案。再次感谢! 这是一个非常被低估的答案,一个非常好的答案:) Paldies

以上是关于时间轴上刻度子集的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

日期格式的旋转轴标签

如何从解析的 d3.js 日期创建新的日期格式

如何将刻度转换为日期格式?

在 R 中,如何在显示日期的 x 轴上添加每月刻度线?

堆叠列不格式化 x 轴上的日期时间戳

如何从日期时间格式的数据在轴中添加每小时刻度