Avec ce cadre de données ("df"):
year pollution
1 1999 346.82000
2 2002 134.30882
3 2005 130.43038
4 2008 88.27546
J'essaie de créer un graphique en courbes comme ceci:
plot5 <- ggplot(df, aes(year, pollution)) +
geom_point() +
geom_line() +
labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore")
L'erreur que je reçois est:
geom_path: chaque groupe est constitué d'une seule observation. Avez-vous besoin d'ajuster l'esthétique du groupe?
Le graphique apparaît sous la forme d'un nuage de points même si je souhaite un graphique en courbes. J'ai essayé de remplacer geom_line()
par geom_line(aes(group = year))
mais cela n'a pas fonctionné.
Dans une réponse, on m'a dit de convertir l'année en une variable factorielle. Je l'ai fait et le problème persiste. Voici le résultat de str(df)
et dput(df)
:
'data.frame': 4 obs. of 2 variables:
$ year : num 1 2 3 4
$ pollution: num [1:4(1d)] 346.8 134.3 130.4 88.3
..- attr(*, "dimnames")=List of 1
.. ..$ : chr "1999" "2002" "2005" "2008"
structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82,
134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list(
c("1999", "2002", "2005", "2008")))), .Names = c("year",
"pollution"), row.names = c(NA, -4L), class = "data.frame")
Vous devez seulement ajouter group = 1
dans le ggplot ou geom_line aes ().
Pour les graphiques linéaires, les points de données doivent être regroupés de manière à ce qu'il sache quels points connecter. Dans ce cas, c'est simple - tous les points doivent être connectés, donc groupe = 1. Lorsque plus de variables sont utilisées et que plusieurs lignes sont dessinées, le regroupement des lignes est généralement effectué par variable.
Référence: Cookbook for R, Chapitre: Graphes Bar_and_line_graphs_ (ggplot2), Graphes linéaires.
Essaye ça:
plot5 <- ggplot(df, aes(year, pollution, group = 1)) +
geom_point() +
geom_line() +
labs(x = "Year", y = "Particulate matter emissions (tons)",
title = "Motor vehicle emissions in Baltimore")
Vous obtenez cette erreur car l'une de vos variables est en fait une variable de facteur. Exécuter
str(df)
pour vérifier cela. Ensuite, effectuez ce changement de variable double pour conserver les numéros d’année au lieu de les transformer en nombres de niveau "1,2,3,4":
df$year <- as.numeric(as.character(df$year))
EDIT: il semble que votre data.frame ait une variable de classe "array" pouvant causer le pb. Essayez alors:
df <- data.frame(apply(df, 2, unclass))
et complot à nouveau?
Démarrez R dans une nouvelle session et collez-le dans:
library(ggplot2)
df <- structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82,
134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list(
c("1999", "2002", "2005", "2008")))), .Names = c("year",
"pollution"), row.names = c(NA, -4L), class = "data.frame")
df[] <- lapply(df, as.numeric) # make all columns numeric
ggplot(df, aes(year, pollution)) +
geom_point() +
geom_line() +
labs(x = "Year",
y = "Particulate matter emissions (tons)",
title = "Motor vehicle emissions in Baltimore")
J'ai eu un problème similaire avec le cadre de données:
group time weight.loss
1 Control wl1 4.500000
2 Diet wl1 5.333333
3 DietEx wl1 6.200000
4 Control wl2 3.333333
5 Diet wl2 3.916667
6 DietEx wl2 6.100000
7 Control wl3 2.083333
8 Diet wl3 2.250000
9 DietEx wl3 2.200000
Je pense que la variable pour l'axe des x devrait être numérique, afin que geom_line sache connecter les points pour tracer la ligne.
après avoir changé la 2ème colonne en numérique:
group time weight.loss
1 Control 1 4.500000
2 Diet 1 5.333333
3 DietEx 1 6.200000
4 Control 2 3.333333
5 Diet 2 3.916667
6 DietEx 2 6.100000
7 Control 3 2.083333
8 Diet 3 2.250000
9 DietEx 3 2.200000
alors ça marche.