2017-04-11 1 views
1

Je veux tracer un objet xts en utilisant ggplot2 mais en obtenant une erreur. Voici ce que je fais:Tracé d'un objet xts à l'aide de ggplot2

dates <- c("2014-10-01", "2014-11-01", "2014-12-01", "2015-01-01", "2015-02-01") 
value <- as.numeric(c(3, 4, 5, 6, 5)) 
new_df <- data_frame(dates, value) 
new_df$dates <- as.Date(dates) 
new_df <- as.xts(new_df[,-1], order.by = new_df$dates) 

Maintenant, j'essaie de tracer à l'aide ggplot2:

ggplot(new_df, aes(x = index, y = value)) + geom_point() 

Je reçois l'erreur suivante:

Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 0, 5

Je ne suis pas tout à fait sûr ce que je fais mal.

Répondre

4

changement minuscule 'index' majuscules 'Index'

ggplot(new_df, aes(x = Index, y = value)) + geom_point() 
0

Avez-vous besoin d'utiliser un objet xts?

Vous pouvez tracer la date et l'heure sans utiliser xts. Voici un exemple utilisant ce que vous avez fourni ci-dessus. Vous pouvez le formater comme vous voulez au-delà de cela.

dates <- c("2014-10-01", "2014-11-01", "2014-12-01", "2015-01-01", "2015-02-01") 
value <- as.numeric(c(3, 4, 5, 6, 5)) 
new_df <- data.frame(dates, value) 
new_df$dates <- as.Date(dates) 

require(scales) 
ggplot(new_df, aes(x = dates, y = value)) + geom_point() + 
scale_x_date(labels = date_format("%Y-%m-%d"), breaks = date_breaks("1 month")) + 
    theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) 
ggsave("time_plot.png", height = 4, width = 4) 

enter image description here

2

La méthode autoplot.zoo dans le zoo (zoo est automatiquement entrané par XTS) va créer des tracés à l'aide ggplot2 pour les objets XTS aussi. Il supporte ggplot2 + ... si vous avez besoin de geoms supplémentaires. Voir ?autoplot.zoo

library(xts) 
library(ggplot2) 
x_xts <- xts(1:4, as.Date("2000-01-01") + 1:4) # test data 

autoplot(x_xts, geom = "point") 

zoo a également fortify.zoo qui convertira un zoo ou XTS objet à un data.frame:

fortify(x_xts) 

donnant:

 Index x_xts 
1 2000-01-02  1 
2 2000-01-03  2 
3 2000-01-04  3 
4 2000-01-05  4 

Le fortify générique est en ggplot2 si Si vous n'avez pas chargé ggplot2, utilisez directement fortify.zoo(x_xts). Pour plus d'informations, voir ?fortify.zoo pour plus d'informations.