在混合2D/3D子图中去除3D绘图的空白处。

8

我在混合2D和3D子图时遇到了去除过多空白的问题。对于纯3D子图,我可以使用fig.subplots_adjust()调整绘制区域以去除空白,参见这里

然而,如果这个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方向上更长,则效果不佳。

enter image description here


你能提供一个最小工作示例吗?上面的代码中有一些语句缺失。 - Nipun Batra
@NipunBatra 谢谢提醒,我已经在开头添加了import并测试过它可以工作。 - Phyinmi
1个回答

7

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

您想要调整轴内灰色立方体的大小。这可以通过更改到该立方体的视距来完成。

例如:ax [3] .dist = 7

enter image description here

ax[3].dist = 9

enter image description here

最佳距离当然取决于观看角度。


我之前尝试过 ax.dist,但由于3D子图的灰色立方体不是正方形,其中一侧会比另一侧有更多的间距。这就是我想要去除的。在您的 ax.dist=9 的情况下,是否可以移除左侧的间距,然后将底部边缘拉伸到模拟纵横比? - Phyinmi
"dist属性已被弃用",请参考新方法 - mins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接