如何裁剪方形宽高比的Axes3D图?

时间:2015-08-08 01:48:19

标签: python matplotlib aspect-ratio mplot3d

这是一个准确的例子:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
f = fig.add_subplot(2, 1, 1, projection='3d')
t = fig.add_subplot(2, 1, 2, projection='3d')

# axes
for d in {f, t}:
    d.plot([-1, 1], [0, 0], [0, 0], color='k', alpha=0.8, lw=2)
    d.plot([0, 0], [-1, 1], [0, 0], color='k', alpha=0.8, lw=2)
    d.plot([0, 0], [0, 0], [-1, 1], color='k', alpha=0.8, lw=2)

f.dist = t.dist = 5.2   # 10 is default

plt.tight_layout()
f.set_aspect('equal')
t.set_aspect('equal')

r = 6
f.set_xlim3d([-r, r])
f.set_ylim3d([-r, r])
f.set_zlim3d([-r, r])

t.set_xlim3d([-r, r])
t.set_ylim3d([-r, r])
t.set_zlim3d([-r, r])

f.set_axis_off()
t.set_axis_off()

plt.draw()
plt.show()

这就是我得到的:

square viewports

这就是我想要的:

rectangular viewports

换句话说,我希望这些情节本身具有正方形宽高比,而不是像这样伸展:

stretched out

由于https://stackoverflow.com/a/31364297/125507

,我得到了那部分工作

但是我希望窗户看到这些图是矩形的,顶部和底部都被裁剪掉了(因为顶部和底部只有白色空间,我生成多个动画GIF,所以我可以&#39 ; t很容易将其后处理到我想要的形状。

基本上我正在制作这个动画,我想要同样的东西,但没有所有的空白:

  

animation

1 个答案:

答案 0 :(得分:3)

为了跟进我的评论并通过设置较小的r并使用subplots_adjust删除子图边距来显示示例:

 
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
f = fig.add_subplot(2, 1, 1, projection='3d')
t = fig.add_subplot(2, 1, 2, projection='3d')

# axes
for d in {f, t}:
    d.plot([-1, 1], [0, 0], [0, 0], color='k', alpha=0.8, lw=2)
    d.plot([0, 0], [-1, 1], [0, 0], color='k', alpha=0.8, lw=2)
    d.plot([0, 0], [0, 0], [-1, 1], color='k', alpha=0.8, lw=2)

f.dist = t.dist = 5.2   # 10 is default

plt.tight_layout()
f.set_aspect('equal')
t.set_aspect('equal')

r = 1
f.set_xlim3d([-r, r])
f.set_ylim3d([-r, r])
f.set_zlim3d([-r, r])

t.set_xlim3d([-r, r])
t.set_ylim3d([-r, r])
t.set_zlim3d([-r, r])

f.set_axis_off()
t.set_axis_off()

fig.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, 
            hspace = 0, wspace = 0)

plt.draw()
plt.show()

这会给出更严格的子图,因为SubplotParams的默认值如下:

  

左:0.125

     

右:0.9

     

底部:0.1

     

顶部:0.9

     

wspace:0.2

     

hspace:0.2

不确定这是OP正在寻找的......

enter image description here