首页 > 解决方案 > Matplotlib 转换和在 3D 中绘制 2D 事物

问题描述

我正在尝试创建一个透视图,其中我有一个 2D 图形“悬停在”另一个 2D 图形上。https://matplotlib.org/stable/gallery/mplot3d/pathpatch3d.html足以让我开始。这三行特别有用:

p = Circle((5, 5), 3)
ax.add_patch(p)
art3d.pathpatch_2d_to_3d(p, z=0, zdir="x")

我通过转换制作了二维图形,通过类似的操作

rect = patches.Rectangle((1,2),3,4)
trans = Affine2D().rotate_around(-5, -6, pi/7) + ax.transData
rect.set_transform(trans)
ax.add_patch(rect)

所以我想我只能art3d.pathpatch_2d_to_3d(rect, z=0, zdir="z")在最后添加。那行不通:我有一个巨大的矩形。如何让转换部分与 2D 到 3D 部分一起使用?

作为第二次尝试,我尝试将变换应用于左下角的坐标,这样我可以避免set_transform

trans = Affine2D().rotate_around(-5, -6, pi/7) + ax.transData
rect = patches.Rectangle(trans.transform((1,2)),3,4, angle = pi/7)
ax.add_patch(rect)
art3d.pathpatch_2d_to_3d(rect, z=0, zdir="z")

阅读https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html,我发​​现+ax.transData原因很麻烦。从我的第二次尝试中省略它会产生一些接近的结果:至少现在矩形的大小是合理的。但它并不完全处于正确的位置。

标签: pythonmatplotlib

解决方案


推荐阅读