2016-07-11 10 views
3

Ich habe einen Benutzerfall, sagen wir, ich habe drei Reihendaten: x, y, z. Ich möchte ein Streudiagramm mit (x, y) als Koordinaten und z als Farbe der Streupunkte mit dem Cmap-Schlüsselwort von plt.scatter machen. Ich möchte jedoch einen bestimmten Punkt hervorheben, indem Sie einen anderen Markentyp und eine andere Größe verwenden als andere Punkte.Wie man den Markertyp für einen bestimmten Punkt in einem Matplotlib Scatter Plot mit Colormap einstellt

Mindestens Beispiel wie unten:

x,y,z = np.random.randn(3,10) 
plt.scatter(x,y,c=z,cmap=matplotlib.cm.jet) 
plt.colorbar()​ 

Wenn ich für einen anderen Markierungstyp verwendet werden soll (x [5], y [5], z [5]), wie konnte ich TU das? Der einzige Weg, an den ich denken kann, ist, mit plt.scatter ([x [5], y [5]) erneut für diesen Punkt zu plotten, aber die Farbe zu definieren, indem man manuell die Farbe der Farbe für z [5] findet. Dies ist jedoch ziemlich mühsam. Gibt es einen besseren Weg?

Antwort

2

Jedes Streudiagramm hat einen einzigen Marker, Sie können nicht verschiedene Marker in einem Streudiagramm verwenden. Wenn Sie also nur die Markergröße ändern und den Marker gleich lassen, können Sie dem scatters Argument ein Array mit verschiedenen Größen hinzufügen.

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(10) 

x,y,z = np.random.randn(3,10) 

sizes = [36]*len(x) 
sizes[5] = 121 
plt.scatter(x,y,c=z,s=sizes, cmap=plt.cm.jet) 

plt.colorbar() 

plt.show() 

enter image description here

Wenn Sie wirklich einen anderen Marker Art benötigen, müssen Sie eine neue Streudiagramm plotten. Sie können dann die Farbgrenzen der zweiten Streuung auf die erste Streuung einstellen.

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(10) 

x,y,z = np.random.randn(3,10) 
xs, ys, zs = [x[5]], [y[5]], [z[5]] 
print xs, ys, zs 
y[5] = np.nan 

sc = plt.scatter(x,y,c=z,s=36, cmap=plt.cm.jet) 
climx, climy = sc.get_clim() 
plt.scatter(xs,ys,c=zs,s=121, marker="s", cmap=plt.cm.jet, vmin=climx, vmax=climy ) 

plt.colorbar() 

plt.show() 

enter image description here

Verwandte Themen