web-dev-qa-db-fra.com

Comment faire du texte de gigue pour éviter de se chevaucher dans une dispersion GGPLOT2?

Je voudrais créer une version propre d'un filtre de diffusion d'étiquettes de texte dans GGPLot2. L'objectif est de représenter visuellement les valeurs croissantes associées à environ 25 éléments. J'utilise déjà "positionnement", mais je me demande si je peux faire mieux.

Voici quelques données simulées:

title <- rep("A Really Rather Long Text Label", 25)
value <- runif(25, 1,10)
spacing <- seq(1:25)
df <- data.frame(title, value, spacing, stringsAsFactors = FALSE)

Et voici le code qui génère le graphique:

library(ggplot2)
myplot <- ggplot(data=df, aes(x=spacing, y=value, label = title)) +
geom_text(aes(colour = value),
    size = 2.5, fontface = "bold",
    vjust = 0,
    position = position_jitter(width=5, height=0)) +
theme_bw() +
scale_x_continuous(limits = c(-5, 30))+
scale_colour_gradient(low = "#6BAED6", high = "#08306B") +
theme(axis.title.x = element_blank(),
      axis.ticks = element_blank(),
      axis.text.x = element_blank(),
      legend.position = "none")
myplot

Il y a beaucoup d'espace pour tout ce texte dans un graphique de taille raisonnable - tant que le texte est libre de passer aussi loin que possible horizontalement! Je ne veux pas gêner verticalement, car le point est de montrer la valeur Y associée à chaque étiquette de texte.

Le graphique sort légèrement différemment chaque fois que vous exécutez la commande ggplot - et parfois, les résultats gigantesques sont meilleurs que d'autres fois. Mais je n'ai pas trouvé de façon d'empêcher systématiquement les étiquettes de se chevaucher.

Je vous serais reconnaissant de toute suggestion sur la façon de nettoyer le positionnement horizontal du texte sans avoir à déplacer des objets individuels manuellement. Je serais également heureux d'entendre d'autres conseils sur la manière d'améliorer ce type de représentation visuelle.

35
user1257313

Regardez le package FField

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

(de cet article https://stats.stackexchange.com/a/62856 )

5
Jonas