[英]R plot with an x time axis: how to force the ticks labels to be the days?
我有这个 csv 格式的文件:
timestamp,pages
2011-12-09T11:20:50.33,4
2012-01-23T17:44:02.71,132
2012-01-28T15:07:59.34,168
第一列是时间戳,第二列是页数。 我需要在垂直轴上绘制页数,在水平轴上绘制时间戳。
时间戳不是固定间隔的,我在 12 月有一天,而在 1 月有两天关闭。
我试过这个代码
df = read.csv("my_data.csv")
df$timestamp = strptime(df$timestamp, "%Y-%m-%dT%H:%M:%S")
plot(df$timestamp,df$pages)
我得到了一个图,在 x 轴的中间只有一个刻度,标签为“Jan”:这没有错,但我想要三个刻度,只有日期和月份。
我试过了
plot(df$timestamp,df$pages,xaxt="n")
axis.Date(1,df$timestamp,"days")
但没有绘制 x 轴。 任何的想法? 谢谢
我会as.Date()
你的timestamp
是这样的:
df$timestamp = as.Date(strptime(df$timestamp, "%Y-%m-%dT%H:%M:%S"))
这将起作用:
plot(df$timestamp,df$pages,xaxt="n")
axis.Date(1,at=df$timestamp,labels=format(df$timestamp,"%b-%d"),las=2)
这将起作用:
plot(df$timestamp,df$pages,xaxt="n")
axis.POSIXct(1, at=df$timestamp, labels=format(df$timestamp, "%m/%d"))
基本上在axis.POSIXct
(请注意,您的数据框中有POSIXct
日期)中,您可以指定轴刻度( at
)的位置以及标签是什么。
通常我喜欢我的日期标签垂直而不是水平。 要在情节之前使用par(las=2)
。
我发现了这个: http : //personality-project.org/r/r.plottingdates.html
这给了我我的解决方案......
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")
重要的部分是daterange
和at=seq(..., by="day")
。
我希望这会有所帮助。 我制作了这个功能,允许添加固定数量的等距时间刻度。 通过设置first.day=T
,该函数将刻度线置于每个月的 1 号。 当然,绘图必须使用xaxt="n"
参数创建。 默认情况下,它使用 dd/mm 格式( format.x="%d/%m"
)添加 10 个刻度( ticks.n=10
),没有月份的第一天,以及标签的水平方向( las=1
)。
axis.time=function(time.x=Sys.time(),ticks.n=10,format.x="%d/%m",first.day=F,las=1){
if (first.day){
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]
} 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.day = T,las=2,format.x = "%m-%y")
在每个月的第一天用不同的格式和对齐方式打勾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.