【问题标题】:matplotlib: remove 3D plot's white spaces in mixed 2D/3D subplotsmatplotlib:在混合的 2D/3D 子图中删除 3D 绘图的空白
【发布时间】:2017-07-05 05:48:26
【问题描述】:

在混合 2D 和 3D 子图时,我无法删除过多的空白。对于纯 3D 子图,我可以调整使用 fig.subplots_adjust() 绘制的区域以删除空白,请参阅 here

但是,如果此 3D 图像位于 2D 子图中,则相同的技巧不起作用。 我创建了如下混合子图:

import matplotlib.pyplot as plt    
from matplotlib import cm
from mpl_toolkits.mplot3d import axes3d

fig,axes = plt.subplots(2,2)
ax = axes.flat

for a in range(3):
    ax[a].plot(range(10),range(10))

ax[3].remove()
ax[3] = fig.add_subplot(224,projection='3d')

X, Y, Z = axes3d.get_test_data(0.03)
ax[3].plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.8,cmap=cm.coolwarm)

ax[3].set_xticklabels('')
ax[3].set_yticklabels('')
ax[3].set_zticklabels('')

fig.subplots_adjust(hspace=0,wspace=0)

现在的诀窍,例如。 fig.subplots_adjust(left=-0.01) 将作用于 2D 子图的左边缘,不修改 3D 子图。有没有办法完全去除 3D 子图周围的空白?我还尝试了更小的ax.dist,如果 3D 绘图在 z 方向上更长,那就不好了。

【问题讨论】:

  • 你能提供最小的工作示例吗?上述代码中缺少语句。
  • @NipunBatra 感谢提醒,我已经在开头添加了导入并测试了它是否可以正常工作。

标签: python matplotlib mplot3d


【解决方案1】:

轴周围没有空白,它甚至与其他子图重叠(它们的脊椎被 3D 轴隐藏)。

您想要的是调整轴内灰色立方体的大小。这可以通过改变对该立方体的观察距离来完成。

例如ax[3].dist = 7

ax[3].dist = 9

最佳距离当然取决于视角。

【讨论】:

  • 我之前尝试过ax.dist,但由于 3D 子图的灰色立方体不是正方形,因此一侧的间距会比另一侧大。这就是我要删除的内容。在您的ax.dist=9 案例中,是否可以删除左侧的间距,然后向下拉伸底部边缘以模仿纵横比?