代码之家  ›  专栏  ›  技术社区  ›  jmd_dk

matplotlib 3:具有紧密布局的三维散点图

  •  3
  • jmd_dk  · 技术社区  · 6 年前

    我有一些代码生成一个三维散点图使用matplotlib的 scatter 结合 tight_layout

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import proj3d 
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    
    N = 100
    x = np.random.random(N)
    y = np.random.random(N)
    z = np.random.random(N)
    
    ax.scatter(x, y, z)
    plt.tight_layout()  # <-- Without this, everything is fine
    plt.savefig('scatter.png')
    

    在matplotlib 2.2.3中,这会生成如下图形: enter image description here

    类似的输出是由旧版本生成的,至少返回到1.5.1。在使用新版本3.0.0时,出现了一些问题 plt.tight_layout() enter image description here

    随之而来的是警告

    …/matplotlib/tight_layout.py:177:UserWarning:左右边距不能大到足以容纳所有轴

    有人可能会说 紧凑的布局 这里没有任何参数(在旧的matplotlibs上)始终不会导致预期的利润紧缩,因此应该避免使用 紧凑的布局 紧凑的布局

    1 回复  |  直到 6 年前
        1
  •  2
  •   jmd_dk    6 年前

    感谢ImportanceOfBeingErnest的评论,它现在可以工作了:

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import proj3d 
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    
    N = 100
    x = np.random.random(N)
    y = np.random.random(N)
    z = np.random.random(N)
    
    ax.scatter(x, y, z)
    
    # The fix
    for spine in ax.spines.values():
        spine.set_visible(False)
    
    plt.tight_layout()
    
    plt.savefig('scatter.png')