如何在matplotlib中缩放多边形补丁?

时间:2017-08-23 15:40:21

标签: python matplotlib

在下面的示例中,我使用matplotlib.patches.Polygon创建一个矩形补丁。有没有办法在将补丁添加到绘图之前对其进行缩放?

我尝试过以各种方式使用matplotlib.transforms.Affine2D但没有成功。像往常一样,关于转换的matplotlib文档严重不足。

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot([-3,3],[-3,3])

x = [-1,0,1,1,0,-1]
y = [1,1,1,-1,-1,-1]
poly = Polygon( zip(x,y), facecolor='red', edgecolor='red', alpha=0.5)
ax.add_patch(poly)

plt.show()

1 个答案:

答案 0 :(得分:1)

如果按比例表示乘以一个因子,您可以通过numpy轻松完成。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot([-3,3],[-3,3])

x = [-1,0,1,1,0,-1]
y = [1,1,1,-1,-1,-1]
scale = 2
poly = Polygon( np.c_[x,y]*scale, facecolor='red', edgecolor='red', alpha=0.5)
ax.add_patch(poly)

plt.show()

使用matplotlib.transforms.Affine2D()变换可以实现同样的效果。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import matplotlib.transforms as transforms

fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot([-3,3],[-3,3])

x = [-1,0,1,1,0,-1]
y = [1,1,1,-1,-1,-1]

trans = transforms.Affine2D().scale(2) + ax.transData

poly = Polygon( np.c_[x,y], facecolor='red', edgecolor='red', alpha=0.5, 
               transform=trans)
ax.add_patch(poly)

plt.show()

虽然对于像这样的简单缩放似乎有点过分。