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 SubMerci beaucoup par avance,
G.
PS : Image en pièce-jointe
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