Skip to main content
 首页 » 编程设计

python之如何使用从另一个变量确定的颜色绘制 3d 散点图

2025年05月04日8zengkefu

我制作了一个 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() 

请您参考如下方法:

“重绘时改变颜色”问题是一个 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()