2014-10-12 17 views
6

Mi chiedo se esiste una funzione per tracciare l'oggetto ts direttamente con ggplot2. In passato, stavo usando la seguente strategia, ma ora sta generando un errore.Tracciare direttamente l'oggetto ts con ggplot2

set.seed(12345) 
dat <- ts(data=runif(n=10, min=50, max=100), frequency = 4, start = c(1959, 2)) 
df <- data.frame(date=as.Date(time(dat)), Y=as.matrix(dat)) 
library(ggplot2) 
ggplot(data=df, mapping=aes(x=date, y=Y))+geom_point() 

errore

Error in as.Date.default(time(dat)) : 
    do not know how to convert 'time(dat)' to class “Date” 

altamente grato se qualcuno mi guida come tracciare direttamente ts oggetto con ggplot2. Grazie in anticipo per il vostro aiuto.

+0

Non esiste un metodo 'as.Date.ts'. Dove sono le prove che ciò ha funzionato in passato? –

+0

@BondedDust: vedere [qui] (http://stackoverflow.com/a/25353201/707145) come riferimento. – MYaseen208

+0

Basta usare 'as.numeric' invece di' as.Date' – DatamineR

risposta

8

Prova questo:

library(zoo) 
library(ggplot2) 
library(scales) 

autoplot(as.zoo(dat), geom = "point") 

o forse:

autoplot(as.zoo(dat), geom = "point") + scale_x_yearqtr() 

Vedi ?autoplot.zoo per maggiori informazioni.

Nota: A proposito, il codice nella domanda funziona se si invia il comando library(zoo) prima.

Aggiornamenti Aggiunto seconda soluzione, library(scales) e acceso yearmon-yearqtr.

+0

autoplot (as.zoo (dat), geom = "point") + scale_x_yearmon() non funziona per me con l'errore "Errore in as.yearmon (pretty_breaks (n) (x)): impossibile trovare la funzione "pretty_breaks" – Meso

+0

(+1): Grazie @ G.Grothendieck per la tua bella risposta – MYaseen208

+0

@ G.Grothendieck: Ti sarei grato se mi guidassi come ottenere quarti lungo anni nell'asse x. Ho provato 'scale_y_yearqtr (formato ="% Y-% q ")' ma non ho potuto ottenere quarti lungo anni.Grazie ancora per il tuo aiuto. – MYaseen208

5

Non so perché ha funzionato prima (in quanto non sembrerebbe essere valida sotto la mia comprensione della Data functins), ma si può risolvere il problema con l'uso di zoo :: as.yearqtr

library(zoo) 
?as.yearqtr 
set.seed(12345) 
dat <- ts(data=runif(n=10, min=50, max=100), frequency = 4, start = c(1959, 2)) 
df <- data.frame(date=as.Date(as.yearqtr(time(dat))), Y=as.matrix(dat)) 
library(ggplot2) 
ggplot(data=df, mapping=aes(x=date, y=Y))+geom_point() 
# No errors. The plot has YYYY-MM labeling as expected for a ggplot2-Date axis. 
2

Questo codice funziona per me

set.seed(12345) 
dat <- ts(data=runif(n=10, min=50, max=100), frequency = 4, start = c(1959, 2)) 
library(ggfortify) 
autoplot(dat, geom = "point", ts.colour = ('dodgerblue3')) #Option 1 

library(zoo) 
autoplot.zoo(as.zoo(dat), geom = "point") #Option 2 
+0

Grazie a @Rafael per una risposta più elegante. – MYaseen208

Problemi correlati