R с временной осью x: как заставить метки тиков быть днями?
У меня есть этот файл в формате csv:
timestamp,pages
2011-12-09T11:20:50.33,4
2012-01-23T17:44:02.71,132
2012-01-28T15:07:59.34,168
Первый столбец - это метка времени, вторая - количество страниц. Мне нужно построить счетчик страниц по вертикальной оси и метку времени по горизонтальной оси.
Временные метки не расположены на регулярной основе, у меня есть один день в декабре и два дня в январе.
Я пробовал этот код
df = read.csv("my_data.csv")
df$timestamp = strptime(df$timestamp, "%Y-%m-%dT%H:%M:%S")
plot(df$timestamp,df$pages)
и я получил сюжет с одним тиком на середине оси x и с меткой "Ян": это не так, но я хотел бы иметь три тика с только днем и месяцем.
Я пытался
plot(df$timestamp,df$pages,xaxt="n")
axis.Date(1,df$timestamp,"days")
но ни одна ось х не построена. Есть идеи? спасибо
Ответы
Ответ 1
Я бы 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)
![enter image description here]()
Ответ 2
Это будет работать:
plot(df$timestamp,df$pages,xaxt="n")
axis.POSIXct(1, at=df$timestamp, labels=format(df$timestamp, "%m/%d"))
По существу в axis.POSIXct
(обратите внимание, что у вас есть POSIXct
даты в вашем фрейме данных), вы указываете, где должны быть POSIXct
оси (at
) и метки.
Обычно мне нравится, что мои метки дат вертикальные, а не горизонтальные. Чтобы получить этот параметр par(las=2)
перед графиком.
Ответ 3
Я нашел это: 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")
.