如何使用另一个变量确定的颜色绘制三维散点图?

时间:2012-10-29 02:54:24

标签: python numpy matplotlib

我制作了一个三维散点图,它显示了星系团中星系的位置(基本上就像纬度和经度),它们是速度的函数。但是,我被要求使数据点的颜色由代码中的另一个变量h确定。变量的目的并不重要,但在我的实际代码中,每个数据点都是由4个数组确定的。在花了很长时间查找如何做到这一点后,我终于(几乎)拥有它。唯一的问题是,当我绘制它时,一旦我移动绘图来从不同的方向看它,点的颜色就会改变。此外,我一直在尝试显示彩条时遇到问题。

import pylab as p
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.cm as cm

ra=np.random.random((100))
dec=np.random.random((100))
h=np.random.random((100))
z=np.random.random((100))

datamin=min(h)
datamax=max(h)
fig=p.figure()

ax3D=fig.add_subplot(111, projection='3d')
ax3D.scatter(ra, dec, z, c=h, vmin=datamin, vmax=datamax, 
marker='o', cmap=cm.Spectral)

p.title("MKW4s-Position vs Velocity")
p.show()

1 个答案:

答案 0 :(得分:1)

'重绘时更改颜色'问题是bug,但看起来已在最新版本(1.1.1)中修复。我已经测试并确认它与1.1.1一样正常工作。

对于colorbar,它需要一个可映射的。您可以使用从scatter返回的集合:

import pylab as p
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.cm as cm

ra=np.random.random((100))
dec=np.random.random((100))
h=np.random.random((100))
z=np.random.random((100))

datamin=min(h)
datamax=max(h)
fig=p.figure()

ax3D=fig.add_subplot(111, projection='3d')
collection = ax3D.scatter(ra, dec, z, c=h, vmin=datamin, vmax=datamax, 
                          marker='o', cmap=cm.Spectral)
p.colorbar(collection)

p.title("MKW4s-Position vs Velocity")
p.show()