如何旋转matplotlib.patches.Polygon?以下代码的输出没有显示任何内容。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib as mpl
fig, ax = plt.subplots(figsize=(10,3))
x = [0.3,0.6,.5,.4]
y = [0.7,0.7,0.9,0.9]
trapezoid = patches.Polygon(xy=list(zip(x,y)), fill=False)
t_start = ax.transData
t = mpl.transforms.Affine2D().rotate_deg(-45)
t_end = t_start + t
trapezoid.set_transform(t_end)
print(repr(t_start))
print(repr(t_end))
ax.add_patch(trapezoid)
plt.show()发布于 2021-01-14 20:12:30
合成变换时,必须使用t_end = t + t_start而不是t_start + t。+操作符是重载的:a + b表示首先应用a,然后应用b。对于仿射变换,这意味着矩阵乘积B@A,其中A和B分别是a和b的变换矩阵。矩阵乘积是not commutative。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib as mpl
import copy
fig, ax = plt.subplots(figsize=(10,3))
x = [0.3,0.6,.5,.4]
y = [0.7,0.7,0.9,0.9]
trapezoid = patches.Polygon(xy=list(zip(x,y)), fill=False)
ax.add_patch(copy.copy(trapezoid))
t_start = ax.transData
t = mpl.transforms.Affine2D().rotate_deg(-45)
t_end = t + t_start
trapezoid.set_transform(t_end)
ax.add_patch(trapezoid)
plt.show()

https://stackoverflow.com/questions/65715474
复制相似问题