fra*_*gut 5 python plot matplotlib mplot3d colormap
我正在尝试使用ax.scatter绘制三维散射图.我已经从拟合文件中读取数据,并将三列中存储的数据读入x,y,z.我确保x,y,z数据大小相同.z已在0和1之间进行了正常化.
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()
Run Code Online (Sandbox Code Playgroud)
我想要实现的是使用颜色来指示z的大小.像更高的z值会变得更暗.但是我不断得到没有我想要的色彩图的情节,它们都是相同的默认蓝色.我做错了什么?谢谢.
您可以c在scatter命令中使用关键字来告诉它如何为点着色.
你不需要设置zdir,因为你正在绘制一个2d集
正如@Lenford指出的那样,您也可以cmap='hot'在这种情况下使用,因为您已经对数据进行了规范化.
我已修改您的示例以使用一些随机数据而不是您的拟合文件.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
z = (z-np.nanmin(z)) /(np.nanmax(z) - np.nanmin(z))
Cen3D = plt.figure()
ax = Cen3D.add_subplot(111, projection='3d')
ax.scatter(x,y,z,cmap='hot',c=z)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
Run Code Online (Sandbox Code Playgroud)