Je complote ggplot
avec geom_point
. L'axe des x sera l'identifiant des individus et l'axe des y est la variable A. Comment puis-je effectuer un graphe de tracé de toutes les valeurs d'ID individuelles sur l'axe des x sans chevauchement des étiquettes? L'identification peut ne pas être continue.
échantillon df (les lignes réelles sont beaucoup plus longues)
> df
ID A
1 4
2 12
3 45
5 1
Code de la parcelle:
ggplot(df, aes(x = ID, y = A)) + geom_point()
Le code ci-dessus a l'axe des x dans les intervalles, mais ne présente pas d'identifiant individuel.
Merci!
Est-ce ce que vous cherchez?
ID <- 1:50
A <- runif(50,1,100)
df <- data.frame(ID,A)
ggplot(df, aes(x = ID, y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
scale_x_continuous("ID", labels = as.character(ID), breaks = ID)
Cela produira cette image:
Vous obtiendrez ainsi une étiquette pour chaque valeur d’ID. Si vous souhaitez supprimer les lignes de la grille (il y en a trop à mon goût), vous pouvez les supprimer en ajoutant theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
EDIT: Le moyen le plus simple consisterait simplement à utiliser l'ID en tant que facteur pour le tracé. comme ça:
ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID")
L'avantage de cette méthode est que vous n'obtenez pas d'espaces vides à partir d'identifiants manquants.
EDIT2: Concernant votre problème avec des étiquettes qui se chevauchent: je suppose que cela provient d'un grand nombre d'identifiants à tracer. Il y a plusieurs façons de gérer cela. Disons donc que votre intrigue ressemble à ceci:
Une idée serait de masquer chaque troisième étiquette de l’axe des x en modifiant l’argument de rupture de l’axe:
ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
scale_x_discrete(breaks = ID[c(T,F,F)]) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID")
ce qui conduit à ceci:
Si vous ne pouvez pas masquer les étiquettes, vous pouvez scinder votre parcelle en sous-parcelles.
df$group <- as.numeric(cut(df$ID, 4))
ggplot(df, aes(x = factor(ID), y = A)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
xlab("ID") +
facet_wrap(~group, ncol = 1, scales = "free_x")
ce qui conduit à ceci: