[英]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.