在Matplotlib中向3d颤动图添加颜色

发布于 2021-01-29 17:31:50

我想在我的3d颤抖图中使用与色图相对应的颜色。该图的2d版本具有一个可选数组,该数组用于将颜色映射到箭头。如何在3D版本中创建相同的效果?

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    3D颤抖图是1.4中的一项新功能(及其文档),其边缘可能仍然有些粗糙。在这种情况下,我们可以尝试使用这样一种事实,即将颤动实现为LineCollection(最终)继承自颤动,ScalarMappable这意味着它知道什么是色彩映射表,并且返回的艺术家具有方法set_array

    这里建立文档

    from mpl_toolkits.mplot3d import axes3d
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    
    x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
                          np.arange(-0.8, 1, 0.2),
                          np.arange(-0.8, 1, 0.8))
    
    u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
    v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
    w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) *
         np.sin(np.pi * z))
    
    q = ax.quiver(x, y, z, u, v, w, length=0.1, cmap='Reds', lw=2)
    q.set_array(np.random.rand(np.prod(x.shape)))
    
    plt.show()
    

    但是,您会注意到 磁头 的颜色与 轴的 颜色不同,这是由于实现方式的实现细节所致,每个零件都以自己的线条绘制。

    直接使用Norm和颜色映射函数并将结果传递给colors一个更好的方法。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看