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.
3 Réponses :
Il y a deux problèmes avec votre code:
purchase_month
n'est pas un objet de la classe "Date"
. grouper
les données par type
. Je veux dire ce qui suit.
sample_data$purchase_month <- as.Date(paste(sample_data$purchase_month, "01", sep = "-")) ggplot(data = sample_data, aes(x = purchase_month, y = orders, color = type), group = type) + geom_line(size = 1) + scale_color_manual(values = c("#00AFBB", "#E7B800")) + theme_minimal()
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")
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:
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()
Veuillez utiliser
dput
pour ajouter des exemples de données à votre question. Vous définissezaes
une fois dans la première ligne.@NelsonGon - Je suis confus? Êtes-vous en train de dire que je devrais remplacer
aes
pardput
dans cette première ligne?Ignorez mon commentaire sur
aes
.dput
sert à ajouter des données à la question. Si vous définissezaes
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!