gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:16:31 25 4
gpt4 key购买 nike

问题

我想设置 X 轴(时间)的格式,以便周末清晰可见。我想显示日期以及星期几。

现状

我用(下面的完整代码)来做到这一点

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

这给了我

enter image description here

通缉情况

我宁愿用一个字母缩写来表示工作日,因为它变得有点紧。另外,我想将周日(实际上还有假期)涂成红色。这就是我的意思(用 GIMP 制作)。请注意如何使用添加第一个星期一和最后一个星期五

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

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

enter image description here

这是此示例的完整代码。

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)

总结一下:

  • 有没有办法用另一种颜色来着色特定的中断?
  • 有没有办法手动更改标签并在周一和周五仍然保留它们在这种情况下,周五的开始和结束时间是多少?
  • 另外,如果有办法让每个标签的行居中,那就是太棒了:)

谢谢!

最佳答案

您还可以使用 breaks="1 day" 参数对标签使用自定义格式化程序,只需在 labels= 之后使用 function(x) 将 myDate$timestamp 替换为 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")))

enter image description here

关于r - 时间轴上刻度子集的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24569628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com