Superposition étiquette / étiquette nuage de point

Bonjour à tous,

Je ne cherche pas une méthode en particulier mais tout connaissance qui permettrait dans un nuage de point affichant des étiquettes, d'empêcher les recouvrements de celles-ci.

Je produis des graph à plusieurs dizaines d'étiquettes, et certaines ont les mêmes coordonnées (X, Y) dans le repère, du coup elles sont superposées. Je cherche une façon de les écarter, sans qu'elles s'éloignent trop de leur point...

Cela permettrait de gagner du temps de traitement a la mano, ou d'éviter d'utiliser pour chaque étiquette 1 par 1 le XY label Chart.

Je sais que les logiciels de spatialisation permettent de gérer les recouvrements, mais justement car ce sont des algos de spatialisation derrière (type Force Atlas), chose que n'est pas excel...

Pour rappel, je partage cette super macro, qui permet d'afficher des étiquettes, si peut que l'on respecte la forme des données suivante :

  • étiquettes sous l'entête "'items" de A1 à Ax
  • valeurs X sous l'entête "'valeur X" de B1 à Bx
  • valeurs Y sous l'entête "'valeur Y" de C1 à Cx

Cliquer sur la fenêtre du graph, puis exécuter la macro.

Sub AttachLabelsToPoints()

   'Dimension variables.
   Dim Counter As Integer, ChartName As String, xVals As String

   ' Disable screen updating while the subroutine is run.
   Application.ScreenUpdating = False

   'Store the formula for the first series in "xVals".
   xVals = ActiveChart.SeriesCollection(1).Formula

   'Extract the range for the data from xVals.
   xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _
      Mid(Left(xVals, InStr(xVals, "!") - 1), 9)))
   xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1)
   Do While Left(xVals, 1) = ","
      xVals = Mid(xVals, 2)
   Loop

   'Attach a label to each data point in the chart.
   For Counter = 1 To Range(xVals).Cells.Count
     ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _
         True
      ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _
         Range(xVals).Cells(Counter, 1).Offset(0, -1).Value
   Next Counter

End Sub

Merci beaucoup par avance,

G.

PS : Image en pièce-jointe

1

bonjour

1/

combien de points peuvent se trouver superposés ? 3 ou 4 ou seulement 2 ?

2/

les logiciels que tu évoques sont de gros logiciels, je ne pense donc pas qu'une macro Excel puisse les imiter.

3/

ma suggestion perso de moi rien que de moi : tricher !

c'est à dire décaler les valeurs de tes points. S'il y a 2 points à 2000, alors tu en mets un à 1980 de manière à le tracer en décalé

il ne reste plus qu'à créer une colonne où tu combine EtiquetteNormale&ValeurRéelle pour l'afficher à côté du point

le lecteur comprendra vite comment lire le graphique

(on dirait alors que le point double est de surface plus grande que la normale et donc on comprend qu'il y en a 2 superposés ou quasi-superposés)

4/

autre idée : créer des colonnes de triche.

col X = SI (ce pointestdéjàprésentplushaut ; "nomdupoint" ; " ")

col Y = SI (col X<>" " ; " " ; "nomdupoint")

trace les points, certains seront superposés

mets les col X et Y en étiquettes, Excel permet de les écrire en décalé il me semble

conseil : mettre une espace entre les " " dans les formules de manière à ne pas avoir de vrais chaînes de caractères vides

Rechercher des sujets similaires à "superposition etiquette nuage point"