График R с осью времени x: как заставить метки тиков быть днями? - PullRequest
12 голосов
/ 29 января 2012

У меня есть этот файл в формате 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")

но ось x не отображается. Любая идея? Спасибо

Ответы [ 3 ]

13 голосов
/ 29 января 2012

Я бы 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

10 голосов
/ 29 января 2012

Это будет работать:

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) перед сюжетом.

5 голосов
/ 16 октября 2014

Я нашел это: 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").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...