2
votes

Les séries chronologiques multilignes ne se formatent pas correctement

J'essaie de faire un tracé de séries chronologiques sur plusieurs lignes en utilisant ggplot2 . Je continue à suivre les directions que je trouve, mais rien ne semble fonctionner.

J'ai déjà essayé plusieurs tentatives basées sur la documentation.

Les données sur lesquelles je travaille ressemblent à ceci: p>

ggplot(data = sample_data, aes(x = purchase_month, y = orders)) + 
geom_line(aes(color = type), size = 1) +
scale_color_manual(values = c("#00AFBB", "#E7B800")) +
theme_minimal()


+----------------+----------+--------+
| purchase_month |   type   | orders |
+----------------+----------+--------+
| 2018-07        | local    |    199 |
| 2018-08        | local    |    231 |
| 2018-09        | local    |    222 |
| 2018-10        | local    |    190 |
| 2018-07        | domestic |   1102 |
| 2018-08        | domestic |    924 |
| 2018-09        | domestic |    999 |
| 2018-10        | domestic |    779 |
+----------------+----------+--------+

Lorsque j'exécute le code, cela ne fonctionne pas. Lorsque j'exécute les deux premières lignes, il ne trace même aucun point. Il construit simplement les axes X et Y.


6 commentaires

Veuillez utiliser dput pour ajouter des exemples de données à votre question. Vous définissez aes une fois dans la première ligne.


@NelsonGon - Je suis confus? Êtes-vous en train de dire que je devrais remplacer aes par dput dans cette première ligne?


Ignorez mon commentaire sur aes . dput sert à ajouter des données à la question. Si vous définissez aes deux fois en utilisant les données de votre question, il est difficile pour quelqu'un de savoir ce qui se passe. Essayer de le régler une fois.


Vous dites donc que les deux premières lignes devraient ressembler à: ggplot (data = sample_data, aes (x = purchase_month, y = orders)) + geom_line ((color = type), size = 1)


@NelsonGon Divulgation: auto-promotion < / a>.


@RuiBarradas merci!


3 Réponses :



2
votes

La partie délicate est d'avoir une colonne dans votre jeu de données comme date. Faisons le ensemble. Tout d'abord, utilisons ces données pour résoudre notre problème:

ggplot(data = sample_data, aes(x = purchase_month, y = orders)) + 
  geom_line(aes(color = type), size = 1) +
  scale_color_manual(values = c("#00AFBB", "#E7B800")) +
  theme_minimal()

Voici les données que nous utiliserons:

library(lubridate)
sample_data$purchase_month <- ymd(paste0(sample_data$purchase_month, "-01"))

Notez que purchase_month n'est pas une date. Je vais le transformer en une date en ajoutant -01 à sa fin, car chaque date dans R a besoin d'un jour. Puisque vous êtes intéressé par les mois, nous pouvons utiliser n'importe quel jour ici. Ensuite, j'utiliserai la fonction ymd du package lubridate pour informer R que nos chaînes sont au format année-mois-jour:

sample_data
  purchase_month     type orders
1        2018-07    local    199
2        2018-08    local    231
3        2018-09    local    222
4        2018-10    local    190
5        2018-07 domestic   1102
6        2018-08 domestic    924
7        2018-09 domestic    999
8        2018-10 domestic    779

Non, il vous suffit d'utiliser votre propre code ggplot2 pour avoir votre tracé:

sample_data <- structure(list(purchase_month = structure(c(17713, 17744, 17775,
  17805, 17713, 17744, 17775, 17805), class = "Date"), type = structure(c(2L,
  2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("domestic", "local"), class = "factor"), 
  orders = c(199, 231, 222, 190, 1102, 924, 999, 779)), row.names = c(NA, 
  -8L), class = "data.frame")

entrez la description de l'image ici


0 commentaires

2
votes

Si nous changeons la colonne purchase_month en classe yearmon et que nous spécifions la même chose que l'échelle X, cela fonctionnera. Utiliser les données affichées de manière reproductible dans la note à la fin:

Lines <- "
purchase_month |   type   | orders
2018-07        | local    |    199
2018-08        | local    |    231
2018-09        | local    |    222
2018-10        | local    |    190
2018-07        | domestic |   1102
2018-08        | domestic |    924
2018-09        | domestic |    999
2018-10        | domestic |    779"
sample_data <- read.table(text = Lines, header = TRUE, sep = "|", strip.white = TRUE)

ou une autre approche consiste à convertir en une série multivariée de forme large avec une colonne par type et à utiliser autoplot.zoo code>. Notez qu'en omettant facet = NULL une sortie multipanel peut être produite.

library(zoo)

z <- read.zoo(sample_data, index = "purchase_month", split = "type", FUN = as.yearmon)

autoplot(z, geom = "blank", facet = NULL) + 
  geom_line(size = 1) +
  scale_color_manual(values = c("#00AFBB", "#E7B800")) +
  theme_minimal() +
  scale_x_yearmon()

L'un ou l'autre produit:

 capture d'écran

Remarque

library(zoo)

sample_data2 <- transform(sample_data, purchase_month = as.yearmon(purchase_month))

ggplot(data = sample_data2, aes(x = purchase_month, y = orders)) + 
  geom_line(aes(color = type), size = 1) +
  scale_color_manual(values = c("#00AFBB", "#E7B800")) +
  theme_minimal() +
  scale_x_yearmon()


0 commentaires