2017-09-19 7 views
1

Ich habe ein Streudiagramm mit einer Farbskalierung, bei der jeder Punkt mit einem anderen Wert verknüpft ist. Dies ist ein fauler Workaround, um ein "countour plot" -Stilbild zu erstellen, ohne Datenpunkte regularisieren zu müssen. Um Analyse einfacher ich mpldatacursor bin mit dem Plot erzeugen interaktive Anmerkungen auf, und ich habe einen benutzerdefinierten Formatierer, die Koordinaten anzeigt gerade fein:mpldatacursor Streudiagramm Farbinformationen

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

aber was will ich wirklich ist für die dritte Zeile, $\Delta F=$$\,$THz , um eine Anweisung einzufügen, die den Wert zurückgibt, der mit der Farbzuordnung an diesem Punkt verknüpft ist. Weiß jemand, mit welchen Kwargen ich das erreichen soll?

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

Was * ist * der "Wert mit der Farbkarte an diesem Punkt verbunden sind"? Wie üblich erhöhen Sie die Chancen, hier dramatisch Hilfe zu bekommen, indem Sie eine klare Problembeschreibung mit einem [mcve] bereitstellen. – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Wie ich sage, "Ich habe ein Streudiagramm mit einer Farbskalierung, wo jeder geplottete Punkt mit einem anderen Wert verbunden ist." Mit anderen Worten verwende ich 3x1D Arrays für diese Handlung. Zwei für Koordinaten und eine als Farbkarte, um jedem Punkt einen Wert zuzuweisen. Ich möchte den Wert des Colormap-Arrays in meinem Datencursor-Formatierer darstellen. –

Antwort

1

Sie müssen den Index des ausgewählten Punktes auf den Wert gezeigt werden, konvertieren. Daher sollten die Farben der Streuung öffentlich verfügbar sein, so dass die ind der pick_event sie indizieren und den Wert am ausgewählten Punkt zurückgeben kann.

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

Danke, der fehlende Schritt, den ich brauchte, war, das Argument "ind" zu verwenden, um das Wörterbuch zu aktualisieren. –