簡體   English   中英

帶有 x 時間軸的 R 圖:如何強制刻度標簽為天?

[英]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")

重要的部分是daterangeat=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM