我希望这可以帮到你。我编写了一个函数,允许添加固定数量的等距时间刻度。
通过设置
first="month"
,该函数将刻度放置在每个月的第一天。如果
first="day"
,则该函数将刻度放置在每天的00:00小时。
当然,绘图必须使用
xaxt="n"
参数创建。
默认情况下,它添加了10个刻度(
ticks.n=10
),使用dd/mm格式(
format.x="%d/%m"
),没有每月或每天的第一天,标签水平方向(
las=1
)。
axis.time=function(time.x=Sys.time(),ticks.n=10,format.x="%d/%m",first="none",las=1){
tz=attr(time.x,"tzone")
if (first == "day"){
time.x=seq(time.x[1],time.x[length(time.x)],60*30)
time.x=time.x[which(diff(as.numeric(format(time.x,"%H")))<0)+1]
time.x=strptime(as.character(as.Date(time.x)),"%Y-%m-%d",tz)
} else if (first == "month") {
time.x=seq(time.x[1],time.x[length(time.x)], 60*60*24/2)
time.x=time.x[which(diff(as.numeric(format(time.x,"%d")))<0)+1]
time.x=strptime(as.character(as.Date(time.x)),"%Y-%m-%d",tz)
} else {
time.x = seq(time.x[1],time.x[length(time.x)], length.out=ticks.n)
}
axis.POSIXct(side = 1,x = time.x,at = time.x,format = format.x,las=las)
假设您有一个数据框:
df1=data.frame(time=seq(Sys.time()-1e8,Sys.time(),length.out = 100),Y=runif(100))
使用
plot(df1)
绘制的图形仅在每年的开头放置X轴刻度。如果按如下方式绘制
plot(df1,xaxt="n")
,则可以使用
axis.time
函数:
axis.time(time.x = df1$time,first = "month",las=2,format.x = "%m-%y")
以获得每个月的第一天的刻度,并具有不同的格式和对齐方式。
![enter image description here](https://istack.dev59.com/Dcn5s.webp)
dm = read.csv("my_data.csv",sep=",",head=TRUE) dm$DateTime <- as.POSIXct(dm$timestamp, format="%Y-%m-%dT%H:%M:%S") daterange=c(as.POSIXlt(min(dm$DateTime)), as.POSIXlt(max(dm$DateTime))) plot(pages ~ DateTime, dm, xaxt = "n") axis.POSIXct(1, at=seq(daterange[1], daterange[2], by="day"), format="%b %d")
- Alessandro Jacopson