Подтвердить что ты не робот

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")

но ни одна ось х не построена. Есть идеи? спасибо

4b9b3361

Ответ 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").