Comment éviter les étiquettes qui se chevauchent dans un tracé R? [fermé]

44

J'essaie d'étiqueter un diagramme de dispersion assez simple en R. C'est ce que j'utilise:

plot(SI, TI)
text(SI, TI, Name, pos=4, cex=0.7)

Le résultat est médiocre, comme vous pouvez le constater (cliquez pour agrandir):

entrez la description de l'image ici

J'ai essayé de compenser cela en utilisant la textxyfonction, mais ce n'est pas mieux . Rendre l'image plus grande en soi ne fonctionne pas pour les groupes denses.

Existe-t-il une fonction ou un moyen simple de compenser cela et de laisser R des étiquettes de tracé qui ne se chevauchent pas ?


Voici un petit sous-ensemble des données que j'ai:

Name;SI;TI
01_BAD_talking_head;6.944714;4.421208
01_GOOD_talking_head;5.680141;4.864035
01_GOOD_talking_head_subtitles;7.170114;4.664205
slhck
la source
1
J'ai posté une question similaire ici , jetez un oeil sur les réponses ici ..
Curious
3
J'ai trouvé une solution ! Vous identify()permet de décider manuellement où placer l'étiquette! Ce n'est pas idéal, mais d'après les solutions proposées, cela fonctionne mieux pour moi.
Curieux

Réponses:

29

Découvrez le nouveau paquet ggrepel . ggrepel fournit des zones géographiques pour que ggplot2 repousse les étiquettes de texte qui se chevauchent. Cela fonctionne aussi bien pour geom_text que pour geom_label.

entrez la description de l'image ici

La figure est tirée de cet article de blog .

Sukhdeep Singh
la source
19

Le directlabelspaquet fait ça. De sa page Web :

Cet ensemble tente de faire de l'étiquetage direct une réalité dans la pratique statistique quotidienne en mettant à disposition un ensemble de fonctions utiles qui facilitent l'étiquetage direct de tracés courants avec des systèmes de traçage de haut niveau tels que lattice et ggplot2.

Cela n’est peut-être pas toujours possible pour les parcelles denses.

Voici un court exemple:

set.seed(123)
a <- c(rnorm(10,-3,2),rnorm(10,3,2))
b <- c(rnorm(10,-3,2),rnorm(10,3,2))
dfr <- data.frame(a,b)
dfr$t <- c(paste("A",1:10,sep=""),paste("B",1:10,sep=""))
direct.label(xyplot(b~a,dfr,groups=t, col="black"))

J'ai réussi à me débarrasser de la coloration ponctuelle col="black", mais pas des étiquettes.

Laurent
la source
1
J'ai du mal à le faire fonctionner. Pourriez-vous peut-être fournir un exemple de travail simple?
Slhck
1
Dans votre cas, quelque chose comme direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))devrait obtenir un résultat similaire.
Laurent
Parfait. Voici ce que j'ai fini par utiliser votre dernier exemple simple. Les étiquettes de couleur et les points sont en fait très bien, puisque vous savez à quoi appartiennent les étiquettes.
Slhck
1
Je devais utiliser library(lattice)pour me rendre xyplotau travail.
David J. Harris
14

Je vous suggère de regarder le wordcloudpaquet. Je sais que ce paquet ne se concentre pas exactement sur les points mais sur les étiquettes elles-mêmes, et le style semble être plutôt figé. Mais malgré tout, les résultats obtenus en l’utilisant étaient assez étonnants. Notez également que la version du paquet en question a été publiée au moment où vous avez posé la question. Elle est donc très récente.

http://blog.fellstat.com/?cat=11

sortie textplot ()

maj
la source
9

J'ai rencontré un problème similaire avec plusieurs des parcelles avec lesquelles j'ai travaillé et j'ai écrit un package de base qui utilise la simulation de champ de force pour ajuster les emplacements des objets. L'avantage par rapport à certaines des solutions citées ci-dessus est le réglage dynamique de la proximité relative d'objet en 2D. Bien que beaucoup d'améliorations soient possibles, notamment l'heuristique et l'intégration avec ggplot, etc., il semble que la tâche soit accomplie. Ce qui suit illustre la fonctionnalité:

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

Pour le moment, il n'y a pas d'heuristique pour une variété de domaines et de distributions de points, car la solution répondait à mes besoins et je souhaitais proposer rapidement quelque chose d'utile aux gens, mais je les ajouterai à moyen terme. Pour le moment, je recommande de mettre les graphiques à l'échelle 100x100 et inversement et de modifier légèrement les paramètres d'attraction et de répulsion par défaut, comme il est garanti.

Gregk
la source
8

Si vous ne pouvez tout simplement pas faire fonctionner correctement les étiquettes telles qu'elles sont produites par R, gardez à l'esprit que vous pouvez toujours enregistrer les graphiques au format vectoriel (comme .pdf) et les insérer dans un programme d'édition comme InkScape ou Adobe Illustrator.

Fomite
la source
8

Quelques outils supplémentaires à regarder dans R:

Ceux-ci ne feront pas tout pour vous, mais l'un d'entre eux pourrait faire partie d'une solution.

Greg Snow
la source