首页 > 解决方案 > 如何在 Python 中使用 matplotlib 库翻译对象

问题描述

我对 Python 相当陌生,目前正在从事一个涉及“matplotlib”库的项目。是否可以创建一个多边形对象,将其修补到图形上定义的点,然后将相同的多边形转换到图形上的另一个区域,而不创建新的多边形?这是我当前用于生成和平铺平行四边形的代码:

for x in range(15):
    for y in range(10):
        parr = plt.Polygon(((x+1,y),(x,y),(x+1,y+1),(x+2,y+1)), fc = 'b', closed = True)
        plt.gca().add_patch(parr)

与其让它沿轴创建新形状,我想知道是否有一种方法可以采用一个形状并将其复制到不同的位置。

标签: pythonpython-3.xmatplotlib

解决方案


这就是 a 的Collection用途。您可以创建Polygon一次并将其提供给PatchCollection. 然后将放置此多边形的所有点定义为offsets

import matplotlib.pyplot as plt
import matplotlib.collections as mcol
import matplotlib.transforms as mtrans
import numpy as np

poly = plt.Polygon(((1,0),(0,0),(1,1),(2,1)), fc = 'b', closed = True)
x,y = np.meshgrid(np.arange(15), np.arange(10))
# create PatchCollection with all coordinates within x=(0..14), y=(0..9) as offsets
pcol = mcol.PatchCollection([poly,], offsets=np.c_[x.flatten(), y.flatten()], 
                            offset_position="data", transOffset=mtrans.IdentityTransform(), 
                            transform=plt.gca().transData)
# colorize the patches
pcol.set_array(np.random.rand(15*10))

plt.gca().add_collection(pcol)
plt.gca().set(xlim=(0,16),ylim=(0,10))       
plt.show()

在此处输入图像描述


推荐阅读