Вопрос по r, ggplot2 – Построение данных по времени в R

8

У меня есть фрейм данных с одним столбцом в виде даты / времени (хранится внутри как числовой), а другие столбцы в виде числового / целого числа, и я хочу построить данные по дате / времени.

Дата / время во фрейме данных были заполнены с использованием следующего.

as.POSIXct(strptime(time, '%H:%M:%S %p %m/%d/%Y',tz='GMT')) 

class(table$time) являетсяnumeric.

How do I plot and show the data in x axis as readable date time in some format. How do I plot subset of rows and not all rows Ex: rows between dateTime1 and dateTime2 where dateTime1 and dateTime2 are date given in a certain format.
Возможно ли вам показать, как выглядит ваш фрейм данных? Мне трудно понять, как твоиtime может быть как числовым, так и в форме '% H:% M:% S% p% m /% d /% Y'; в то же время. plannapus

Ваш Ответ

2   ответа
10

ggplot2более конкретноgeom_point или жеgeom_line (обратите внимание, что я использую данные примера из @plannapus):

require(ggplot2)
theme_set(theme_bw()) # Change the theme to my preference
ggplot(aes(x = time, y = variable), data = data) + geom_point()

enter image description here

или используя геометрию линии:

ggplot(aes(x = time, y = variable), data = data) + geom_line()

enter image description here

ggplot2 автоматически распознает, что тип данных оси x является датой, и соответственно рисует ось.

+1 действительно намного удобнее моего. Есть ли способ контролировать формат надписей или их размещение при необходимости?
Да, вы можете использоватьscale_x_date или жеscale_x_datetime подправить весы. Смотрите их документацию для некоторых примеров.
7

data <- structure(list(time = structure(c(1338361200, 1338390000, 1338445800, 1338476400, 1338532200, 1338562800, 1338618600, 1338647400, 1338791400, 1338822000), class = c("POSIXct", "POSIXt"), tzone = ""), variable = c(168L, 193L, 193L, 201L, 206L, 200L, 218L, 205L, 211L, 230L)), .Names = c("time", "variable"), row.names = c(NA, -10L), class = "data.frame")
data
              time variable
1  2012-05-30 09:00:00      168
2  2012-05-30 17:00:00      193
3  2012-05-31 08:30:00      193
4  2012-05-31 17:00:00      201
5  2012-06-01 08:30:00      206
6  2012-06-01 17:00:00      200
7  2012-06-02 08:30:00      218
8  2012-06-02 16:30:00      205
9  2012-06-04 08:30:00      211
10 2012-06-04 17:00:00      230

Для отображения даты и времени на оси вы можете использовать функциюaxis.POSIXct:

plot(data, xaxt="n")
axis.POSIXct(side=1, at=cut(data$time, "days"), format="%m/%d") 

Вы можете контролировать, где падают тикиat (что касается обычной функцииaxis за исключением того, что он должен быть обеспечен объектами класса POSIXct) и контролировать, как они будут выглядеть сformat.

Что касается поднабора, если ваши объекты dateTime1 и dateTime2 также являются объектами POSIXct, вы можете делать это так же, как и любой другой вид поднабора.

dateTime1 <- strptime("00:00 05/31/2012", format="%H:%M %m/%d/%Y")
dateTime2 <- strptime("3 Jun 2012 05-30", format="%d %b %Y %H-%M")
data[data$time < dateTime2 & data$time > dateTime1, ]
                 time variable
3 2012-05-31 08:30:00      193
4 2012-05-31 17:00:00      201
5 2012-06-01 08:30:00      206
6 2012-06-01 17:00:00      200
7 2012-06-02 08:30:00      218
8 2012-06-02 16:30:00      205

Похожие вопросы