【问题标题】:How to plot a 3d scatterplot with the color determined from another variable?如何使用从另一个变量确定的颜色绘制 3d 散点图?
【发布时间】:2012-10-29 02:54:23
【问题描述】:

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

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案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()
    

    【讨论】:

    • 嗯...我删除了旧的并下载了新的,但它仍然无法正常工作。当我重新定位时,它们都变成蓝色。颜色图看起来很棒,谢谢!编辑:没关系我是个白痴。
    猜你喜欢
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多