Как создать многопанельные графики с объектами времени scatterplot / xyplot и POSIX? - PullRequest
0 голосов
/ 22 июня 2010

Вопрос новичка. (ДОБАВЛЕНО НОВОЙ ИНФОРМАЦИИ)

У меня есть набор данных с метками времени, которые были собраны случайным образом. Мне нравится создавать матрицу графиков, но я не могу создавать объекты scatterplot или xyplot & time.

мои данные

dataset$Time  #POSIX time objects (no set sampling period)
              #i built POSIX time objects by dataset$Time<-strptime(tt, "%H:%M:%OS")
              #the origial string was formated like this 12:12:12.234 (HH:MM:SS:msec)
dataset$d1, dataset$d2 #integers
dataset$d3 #factor with 10 levels

.

я могу сделать это

plot( dataset$Time, dataset$d1)
scatterplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)

Однако я не могу сделать это (объект времени POSIX по оси x)

scatterplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)

( НОВАЯ ИНФОРМАЦИЯ )

Ошибка в структуре (.Internal (as.POSIXct (x, tz)), class = c ("POSIXt", "POSIXct"), недопустимый аргумент "x".

( НОВАЯ ИНФОРМАЦИЯ ), но это работает (объект времени POSIX по оси Y)

xyplot(dataset$Time ~ dataset$d1 | dataset$d3, data=dataset)

связанный, но другой вопрос - hexbin. Когда объекты времени добавляются в шестиугольник, график из шестиугольника не показывает правильный формат времени на единицах.

bin<-hexbin(dataset$Time, dataset$d1) 
plot(bin))

Что мне делать?

Спасибо, что заглянули в него !!

Ответы [ 3 ]

2 голосов
/ 22 июня 2010

Для меня это просто работает, поэтому у вас, вероятно, есть вектор времени в плохом формате. Что вы получаете, когда звоните class(dataset$Time)? Он должен содержать «POSIXct», чтобы это работало.

С другой стороны, вам не нужно указывать dataset$ в формуле, если вы поставите data=dataset.

2 голосов
/ 22 июня 2010

Вот рабочий пример.Возможно, вы неправильно указали форматы данных - нужно быть осторожным с точными форматами данных.

Во-первых, простой фрейм данных:

R> X <- data.frame(pt=Sys.Date()+0:4, x1=100+cumsum(rnorm(5)),
+                                     x2=90+cumsum(rt(5,4)))
R> X
          pt     x1    x2
1 2010-06-22  98.73 90.33
2 2010-06-23  99.43 89.56
3 2010-06-24  98.85 86.95
4 2010-06-25  99.08 88.52
5 2010-06-26 100.30 94.08
R> 

Это так называемый широкая форма, которую решетка не использует.Вам необходимо преобразовать его в формат long .Я использую stack() здесь, вы также можете использовать cast() и melt() из пакета изменить :

R> Y <- data.frame(pt=rep(X$pt,2), stack(X, select=c(x1,x2)))
R> Y
           pt values ind
1  2010-06-22  98.73  x1
2  2010-06-23  99.43  x1
3  2010-06-24  98.85  x1
4  2010-06-25  99.08  x1
5  2010-06-26 100.30  x1
6  2010-06-22  90.33  x2
7  2010-06-23  89.56  x2
8  2010-06-24  86.95  x2
9  2010-06-25  88.52  x2
10 2010-06-26  94.08  x2
R> 

Теперь вызов xyplot это просто:

R> xyplot(values ~ pt | ind, data=Y, panel=panel.lines)

и вы, конечно, можете использовать гораздо более сложные условные выражения.

2 голосов
/ 22 июня 2010

Очевидно, что у R есть некоторые проблемы, связанные с зависимостью от времени POSIX ... это дает мне ошибку:

Ошибка в +.POSIXt (x [floor (d)], x [потолок (d)]): двоичный символ '+' не определен для объектов "POSIXt"

, просто приведите их к числовому типу, и он должен работать.Вы можете скрыть соответствующую ось и перерисовать ее позже с правильными датами

Например:

scatterplot(dataset$d1 ~ as.numeric(dataset$Time) | dataset$d3, data=dataset, xaxt="n")
axis(1, at=as.numeric(dataset$Time), labels=dataset$Time, cex.axis=0.5)
...