gpt4 book ai didi

python - matplotlib 3 : 3D scatter plots with tight_layout

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:31 25 4
gpt4 key购买 nike

我有一些代码使用 matplotlib 的 scatter 结合 tight_layout 生成 3D 散点图,请参阅下面的简化代码:

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: The left and right margins cannot be made large enough to accommodate all axes decorations

有人可能会争辩说,像这里那样使用没有参数的 tight_layout 无论如何(在旧的 matplotlibs 上)并不能始终如一地导致预期的收紧边距,因此应该避免使用 tight_layout 首先是 3D 图。但是,通过手动调整 tight_layout 的参数,即使在 3D 图上,它(曾经是)一种不错的修剪边距的方法。

我猜这是 matplotlib 中的一个错误,但也许他们做了一些我没有注意到的有意更改。任何有关修复的指示都将受到赞赏。

最佳答案

感谢 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')

从评论中的链接来看,这似乎将在 matplotlib 3.0.x 中修复。目前,可以使用上述内容。

关于python - matplotlib 3 : 3D scatter plots with tight_layout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52487395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com