如何绘制一个三维散点图,颜色由另一个变量决定?

3
我制作了一个3D散点图,显示星系团中星系的位置(类似于纬度和经度),以其速度为函数。然而,有人要求我根据代码中的另一个变量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个回答

1
“重绘时更改颜色”问题是一个错误,但看起来在最新版本(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()

嗯......我删掉了旧的,下载了新的,但它仍然不起作用。当我重新定位时,它们都变成蓝色。虽然调色板看起来很棒,但是编辑:算了,我是个白痴。 - Adam Birenbaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接