Как правильно отформатировать поле даты на графике smoothScatter? - PullRequest
1 голос
/ 12 августа 2011

У меня есть данные, которые выглядят так:

> head(data)
                 date    price volume
1 2011-06-26 17:16:05 17.51001  2.000
2 2011-06-26 20:50:00 14.80351  2.981
3 2011-06-26 20:51:00 14.90000  2.000
4 2011-06-26 20:52:00 14.89001  0.790
5 2011-06-26 20:53:00 15.00000  1.000
6 2011-06-26 21:05:01 16.20000  6.500
> str(head(data))
'data.frame':   6 obs. of  3 variables:
 $ date  : POSIXct, format: "2011-06-26 17:16:05" "2011-06-26 20:50:00" "2011-06-26 20:51:00" "2011-06-26 20:52:00" ...
 $ price : num  17.5 14.8 14.9 14.9 15 ...
 $ volume: num  2 2.98 2 0.79 1 ...

Когда я строю это так:

someColors <- colorRampPalette(c("black", "blue", "orange", "red"), space="Lab")
smoothScatter(data, colramp=someColors)

Я получаю почти то, что ищу, но он конвертирует даты посикса в числа. Как я могу установить метки x более полезным, чтобы мои материалы были немного более читабельными?

https://img.skitch.com/20110812-nmsrtdbtaey3yqa29g8xkc17tn.png

Редактировать : Я могу получить приблизительное значение того, что хочу, вот так:

smoothScatter(data, colramp=someColors, xaxt="n")
axis(1, at=data$date,
     labels=lapply(data$date, function(d) strftime(d, "%F")),
     tick=FALSE)

Это ужасно медленно, хотя. Похоже, я должен быть в состоянии подготовить данные или посоветовать лоток с этикетками.

1 Ответ

2 голосов
/ 12 августа 2011

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

days <- seq(min(data$date), max(data$date), by = 'month')
axis(1, at=days,
     labels=strftime(days, "%F"),
     tick=FALSE)

Может также помочь округлить время до ближайшего дня:

days <- seq(as.Date(min(data$date)), as.Date(max(data$date)), by = 'month')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...