2017-01-26 3 views
0

У меня есть данные, которые отбираются ежечасно, и я строю данные соответствующим образом;Настроить метки оси x с датами в R

x<-c("2016-05-09 09:00:00", "2016-05-09 10:00:00", "2016-05-09 11:00:00", "2016-05-10 12:00:00") 
    y<- c(2,NA,3,5) 
    df<-data.frame(x,y) 

    plot(df$x,df$y) 

На оси x я хочу отображать метку времени как год-месяц. Кроме того, я хочу отображать только одну метку в день (даже если у меня есть несколько измерений в одну дату). Есть ли способ сделать это? Я предпочитаю основные функции

Уважением,

+0

как вы хотите, чтобы агрегировать измерения на ту же дату? –

+0

Это то, что я не хочу собирать измерения, но держать их в своем первоначальном почасовом порядке. Извините за неясность. – user09034

ответ

0

Делать это с ggplot довольно легко, потому что вы можете использовать scale_x_date() (вам нужно преобразовать x в курсе as.Date()).

x <- 
    as.Date(
    c(
     "2016-05-09 09:00:00", 
     "2016-05-09 10:00:00", 
     "2016-05-09 11:00:00", 
     "2016-05-10 12:00:00" 
    ) 
) 
y <- c(2, NA, 3, 5) 
df <- data.frame(x, y) 

library(ggplot2) 
ggplot(df, aes(x = x, y = y)) + geom_line() + scale_x_date() 

enter image description here

+0

Спасибо. Хотя решение Daniels требует ggplot2, оно работает для проблемы, заданной в вопросе. – user09034

1

Я придумал решение. Возможно, это не самый лучший, но здесь он идет:

Я подавил график оси x по оси x (xaxt = 'l), а затем создал новую ось xaxis с помощью оси(). Я упорядочил тики от 1 до общего количества часов, которые имеют измерения (обратите внимание, что это непрерывные данные) на 24 (количество часов в день), затем я добавил свои собственные метки, используя метки = c («2016-05-09 ", ...) в оси().

Обратите внимание, что это решение работало, так как у меня было всего 10 дней данных. Я полагаю, что этот подход не подходит для длительных периодов времени.

#Hourly data 
    x<-c("2016-05-09 00:00:00","2016-05-09 01:00:00", "2016-05-09 02:00:00", "2016-05-09 03:00:00", "2016-05-09 04:00:00", "2016-05-09 05:00:00","2016-05-09 06:00:00","2016-05-09 07:00:00","2016-05-09 08:00:00","2016-05-09 09:00:00","2016-05-09 10:00:00","2016-05-09 11:00:00","2016-05-09 12:00:00","2016-05-09 13:00:00","2016-05-09 14:00:00","2016-05-09 15:00:00","2016-05-09 16:00:00","2016-05-09 17:00:00","2016-05-09 18:00:00","2016-05-09 19:00:00","2016-05-09 20:00:00","2016-05-09 21:00:00","2016-05-09 22:00:00","2016-05-09 23:00:00","2016-05-10 00:00:00") 
    y<-seq(1,length(x),by=1) 
    df<-data.frame(x,y) 

    #Suppress x-axis 
    plot(df$x,df$y,xaxt='n') 

    #Create new x-axis with ticks in 24 hour interval 
    axis(side=1,at=seq(1,length(x),by=24),labels=c("2016-05-09","2016-05-10")) 
+0

Пожалуйста, покажите свою работу, а не описывайте свое решение. Таким образом, будущие искатели информации могут увидеть точное решение. Но бог для вас, чтобы найти решение своего вопроса. – emilliman5

+0

Теперь я добавил код, чтобы пойти с моим решением. – user09034