Как создать временную диаграмму рассеяния с R? - PullRequest
8 голосов
/ 23 августа 2011

Данные представляют собой серию дат и времени.

date time
2010-01-01 09:04:43
2010-01-01 10:53:59
2010-01-01 10:57:18
2010-01-01 10:59:30
2010-01-01 11:00:44
…

Моей целью было представить диаграмму рассеяния с датой по горизонтальной оси (x) и временем по вертикальной оси (y). Я думаю, я мог бы также добавить интенсивность цвета, если есть несколько раз для одной и той же даты.

Было довольно легко создать гистограмму дат.

mydata <- read.table("mydata.txt", header=TRUE, sep=" ")
mydatahist <- hist(as.Date(mydata$day), breaks = "weeks", freq=TRUE, plot=FALSE)
barplot(mydatahist$counts, border=NA, col="#ccaaaa")
  1. Я еще не выяснил, как создать диаграмму рассеяния, где осью являются дата и / или время.
  2. Я также хотел бы иметь возможность иметь ось, необязательную с линейными датами ГГГГ-ММ-ДД, но также основанную на месяцах, таких как ММ-ДД (накапливаются разные годы), или даже с ротацией по неделям.

Любая помощь, пощечина RTFM или подсказки приветствуются.

Ответы [ 2 ]

15 голосов
/ 23 августа 2011

Пакет ggplot2 довольно легко обрабатывает даты и время.

Создайте некоторые данные даты и времени:

dates <- as.POSIXct(as.Date("2011/01/01") + sample(0:365, 100, replace=TRUE))
times <- as.POSIXct(runif(100, 0, 24*60*60), origin="2011/01/01")

df <- data.frame(
  dates = dates,
  times = times
)

Затем получите магию ggplot2.ggplot автоматически обрабатывает даты, но для правильного форматирования оси времени используйте scale_y_datetime():

library(ggplot2)
library(scales)
ggplot(df, aes(x=dates, y=times)) + 
  geom_point() + 
  scale_y_datetime(breaks=date_breaks("4 hour"), labels=date_format("%H:%M")) + 
  theme(axis.text.x=element_text(angle=90))

enter image description here


Относительно последней части вашего вопросапри группировке по неделям и т. д. Чтобы достичь этого, вам, возможно, придется предварительно суммировать данные в нужные вам группы.Вы можете использовать, возможно, plyr для этого, а затем передать полученные данные в ggplot.

0 голосов
/ 23 августа 2011

Я бы начал с чтения as.POSIXct, strptime, strftime и difftime.Эти и связанные с ними функции должны позволять вам извлекать нужные подмножества ваших данных.Форматирование немного сложное, поэтому поиграйтесь с примерами в файлах справки.
И, как только ваши даты будут преобразованы в класс POSIX, as.numeric () преобразует их все в числовые значения, следовательно, их легко сортировать,сюжет и т. д.

Редактировать: Андре предлагает сыграть с ggplot, чтобы упростить спецификации осей.

...