Ich versuche mit ax.scatter ein 3D-Streudiagramm zu plotten. Ich habe die Daten aus einer Fits-Datei gelesen und Daten aus drei Spalten in x, y, z gespeichert. Und ich habe sichergestellt, dass x, y, z Daten die gleiche Größe haben. z wurde zwischen 0 und 1 normiert.Matplotlib 3D-Plot Verwendung Colormap
import numpy as np
import matplotlib
from matplotlib import pylab,mlab,pyplot,cm
plt = pyplot
import pyfits as pf
from mpl_toolkits.mplot3d import Axes3D
import fitsio
data = fitsio.read("xxx.fits")
x=data["x"]
y=data["y"]
z=data["z"]
z = (z-np.nanmin(z)) /(np.nanmax(z) - np.nanmin(z))
Cen3D = plt.figure()
ax = Cen3D.add_subplot(111, projection='3d')
cmap=cm.ScalarMappable(norm=z, cmap=plt.get_cmap('hot'))
ax.scatter(x,y,z,zdir=u'z',cmap=cmap)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
Was ich versuche zu erreichen, ist Farbe verwenden, um die Größe von z anzugeben. Je höher der Wert von z wird, desto dunkler wird die Farbe. Aber ich bekomme immer eine Zeichnung ohne die Colormap, die ich möchte, sie sind alle die gleiche blaue Standardfarbe. Was habe ich falsch gemacht? Vielen Dank.
Es hat funktioniert, danke! – frankgut
@frangkgut Da diese Antwort für dich funktioniert hat, bitte [akzeptiere die Antwort] (http://stackoverflow.com/help/someone-answers), damit die Frage wie beantwortet angezeigt wird. –
Beachten Sie auch - wenn Sie wollen, dass die * höheren * Werte eine * dunklere * Farbe haben wie im Q, verwenden Sie 'c = -z'. –