2017-09-19 6 views
1

J'ai un nuage de points avec une échelle de couleurs où chaque point est associé à une autre valeur. Il s'agit d'une solution de contournement paresseux pour créer une image de style "countour plot" sans avoir à régulariser les points de données. Pour faciliter l'analyse J'utilise mpldatacursor pour générer des annotations interactives sur le terrain, et j'ai un formatter personnalisé qui affiche les coordonnées très bien:mpldatacursor Scatter Informations sur la couleur du point de tracé

datacursor(scatter, 
      formatter='$T=${x:.2f}$^\circ$C\n$I=${y:.2f}$\,$mA\n$\Delta F=$$\,$THz'.format, 
      draggable=True) 

mais ce que je veux vraiment est pour cette troisième ligne, $\Delta F=$$\,$THz , pour inclure une instruction qui renvoie la valeur associée à la carte de couleurs à ce stade. Est-ce que quelqu'un sait ce que kwargs je devrais utiliser pour y parvenir?

EDIT: MWE

from mpldatacursor import datacursor 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111) 

scatter = ax.scatter(np.random.random(100), 
      np.random.random(100), 
      c=np.random.random(100), 
      s=0.5) 

cb = plt.colorbar(scatter, label="Colour") 

datacursor(scatter, 
      formatter='$T=${x:.2f}$^\circ$C\n$I=${y:.2f}$\,$mA\n$\Delta F=$$\,$THz'.format, 
      draggable=True) 
+0

Qu'est-ce que * est * la "valeur associée à la carte de couleur à ce moment-là"? Comme d'habitude, vous obtenez des chances d'obtenir de l'aide ici en fournissant une description claire du problème avec un [mcve]. – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Comme je le dis, "j'ai un nuage de points avec une échelle de couleurs où chaque point est associé à une autre valeur." En d'autres termes, j'utilise des tableaux 3x1D pour cette représentation graphique. Deux pour les coordonnées, et un comme carte de couleurs pour attribuer une valeur à chaque point. Je souhaite présenter la valeur du tableau colourmap dans mon formateur de datacursor. –

Répondre

1

Vous devez convertir l'index du point choisi à la valeur à afficher. Par conséquent, les couleurs du nuage de points devraient être accessibles au public, de sorte que le ind du pick_event puisse l'indexer et renvoyer la valeur au point sélectionné.

from mpldatacursor import datacursor 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111) 

x = np.random.random(100) 
y = np.random.random(100) 
c = np.random.random(100) 

scatter = ax.scatter(x, y, c=c, s=1) 

cb = plt.colorbar(scatter, label="Colour") 

def fmt(**dic): 
    tx = '$T=${x:.2f}$^\circ$C\n$I=${y:.2f}$\,$mA\n$\Delta F=${z:.2f}$\,$THz' 
    dic.update({"z" : c[dic["ind"][0]]}) 
    return tx.format(**dic) 


datacursor(scatter, formatter=fmt, draggable=True) 

plt.show() 

enter image description here

+0

Merci, l'étape manquante dont j'avais besoin était d'utiliser l'argument "ind" pour mettre à jour le dictionnaire. –