2015-03-04 3 views
0

У меня есть кадр данных с двумя столбцами. Первое - это числовое значение, другое - строка, описывающая время. Формат времени выглядит как yyyy-mm-dd -hh-mm-ss - ?????? (например, 2015-03-04--12-11-35-669696), я не знаю, что означают последние 6 цифр. Например.R + ggplot: упорядочить нерегулярные строки времени для участка

 y      time 
1 4.548 2014-08-11--09-07-44-202586 
2 4.548 2014-08-11--09-07-54-442586 
3 4.548 2014-08-11--09-08-04-522586 
4 4.478 2014-08-11--09-08-14-762586 
5 4.431 2014-08-11--09-08-24-522586 
6 4.446 2014-08-11--09-08-34-922586 
7 4.492 2014-08-11--09-08-44-522586 
8 4.508 2014-08-11--09-08-54-442586 
9 4.486 2014-08-11--09-09-04-202586 
10 4.497 2014-08-11--09-09-14-442586 
11 4.461 2014-08-11--09-09-24-202586 

Я хочу, чтобы построить их с

ggplot(df, aes(x=time, y=y)) + geom_line() 

Но у меня есть проблема, что ggplot не знает, как бороться с данными классового характера и, в частности, с моим заданным форматом времени. Я попытался использовать AsciiToInt из pakage {sfsmisc}, чтобы преобразовать строки в числовые значения, но он повторяет список целых чисел для каждой строки (по одному числу для каждого символа, конечно). Я также могу сортировать свои строки времени с mixedsort из pakage {gtools}, но я не использую его для сюжета (также учитывая расстояние).

Другая проблема заключается в том, что я не хочу, чтобы каждая строка времени отображалась как галочка по оси x, из-за того, что у меня около 20 тыс. Строк. Возможно, я могу решить эту проблему, например, в this question, но я не могу проверить, что до тех пор, пока возникает первая проблема.

Можете ли вы мне помочь, построив такие данные со временем как числовое значение на оси х?

ответ

0

Я загрузил ваши данные как файл .txt с указанием времени. Сначала я конвертирую ваши данные в POSIXct. Чтобы сделать более чистый график для целей тестирования, я опускаю поле секунд, если вы хотите добавить их, просто используйте прокомментированную строку.

library(ggplot2) 
timedat<-read.csv("~/Work/Timedat.csv") 
timedat 
str(timedat) 
> str(timedat) 
'data.frame': 11 obs. of 3 variables: 
$ X : int 1 2 3 4 5 6 7 8 9 10 ... 
$ y : num 4.55 4.55 4.55 4.48 4.43 ... 
$ time: Factor w/ 11 levels "2014-08-11--09-07-44-202586",..: 1 2 3 4 5 6 7 8 9 10 ... 

#timedat$time<-as.POSIXct(as.character(timedat$time),format = "%Y-%m-%d--%H-%M-%S") 

timedat$time<-as.POSIXct(as.character(timedat$time),format = "%Y-%m-%d--%H-%M") 

qplot(data=timedat,y=y,x=time)+theme_bw() 

> timedat 
    X  y      time 
1 1 4.548 2014-08-11--09-07-44-202586 
2 2 4.548 2014-08-11--09-07-54-442586 
3 3 4.548 2014-08-11--09-08-04-522586 
4 4 4.478 2014-08-11--09-08-14-762586 
5 5 4.431 2014-08-11--09-08-24-522586 
6 6 4.446 2014-08-11--09-08-34-922586 
7 7 4.492 2014-08-11--09-08-44-522586 
8 8 4.508 2014-08-11--09-08-54-442586 
9 9 4.486 2014-08-11--09-09-04-202586 
10 10 4.497 2014-08-11--09-09-14-442586 
11 11 4.461 2014-08-11--09-09-24-202586 

Это дает следующий участок с датами, красиво оформленными.

+1

Когда я также хотел добавить секунды, я использовал 'format ="% Y-% m-% d -% H-% M-% S', но тогда тики показывают только минуты (45 , 00,15,30,45, ...) Итак, я использовал 'scale_x_datetime (breaks = date_breaks (« 30 секунд »), labels = date_format («% Y-% m-% d% H:% M:% S "))', чтобы исправить это. – Jojo

Смежные вопросы