2016-11-04 4 views
1

меня раздражает ошибка с scale_x_datetime ...ошибка с ggplot2 scale_x_datetime

plt = ggplot() + geom_line(data=d, aes(Time, d[, 2]), color=col) + 
     scale_x_datetime(breaks = seq(d[1,1],d[dim(d)[1],1],interval*60)) 

Производит правильный штамп времени на участке в определенные промежутки времени ... Однако, если добавить date_labels = "%m-%d %H:%M" форматировать путь к штамп времени печатается на участке, вдруг час значение отстоит от 5 часов ...

следующий код выдает неверные значения часа на участке

plt = ggplot() + geom_line(data=d, aes(Time, d[, 2]), color=col) + 
     scale_x_datetime(date_labels = "%m-%d %H:%M", 
         breaks = seq(d[1,1],d[dim(d)[1],1],interval*60)) 

В целях воспроизводимости ...

d = data.frame(Time = as.POSIXct(seq(1446871740, 1446893340, 60), origin = "1970-01-01"), 
       Value = rnorm(361)) 
interval = floor(as.numeric(difftime(d[dim(d)[1],1], d[1,1], units="mins"))/3) 
col = "red" 
+2

Это связано с часовым поясом, см. [Здесь] (http://stackoverflow.com/questions/35836587/time-axis-values-incorrect-in-some-ggplot-plots-but-not-others). Это было исправлено в версии разработки [ggplot2_2.1.0.9001] (https://github.com/tidyverse/ggplot2/blob/master/NEWS.md). – aosmith

+0

Добавьте это как решение, и я приму ответ. – Constantine

ответ

1

Это проблема с часовым поясом. В версиях ggplot2 до ggplot2_2.2.0 вам нужно установить часовой пояс, когда вы устанавливаете метки в scale_x_datetime.

scale_x_datetime(labels = scales::date_format("%m-%d %H:%M", tz = "America/Los_Angeles") 

Это больше не является проблемой для ggplot2_2.2.0. От news:

шкала _ * _ datetime() теперь поддерживает часовые пояса. Он будет использовать часовой пояс , прикрепленный к переменной по умолчанию, но может быть переопределен аргументом часового пояса .

Обновление ggplot2 до текущей версии позволит решить проблему с временным сдвигом для вашего второго участка. Если вы хотите установить другой часовой пояс, теперь есть timezone аргумент scale_*_datetime.