繁体   English   中英

Matplotlib 3D绘图使用色彩映射

[英]Matplotlib 3D plot use 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()

我想要实现的是使用颜色来指示z的大小。 像更高的z值会变得更暗。 但是我不断得到没有我想要的色彩图的情节,它们都是相同的默认蓝色。 我做错了什么? 谢谢。

您可以在scatter命令中使用c关键字来告诉它如何为点着色。

您不需要设置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()

在此输入图像描述

根据pyplot.scatter文档 ,指定要绘制的点必须采用浮点数组的形式才能应用cmap,否则默认颜色(在本例中为jet)将继续应用。

另外,简单地说明cmap='hot'将适用于此代码,因为color color hot是matplotlib中注册的颜色映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM