Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib可绘制数百个矩形轮廓_Python_Python 3.x_Matplotlib_Plot_Graph - Fatal编程技术网

Python Matplotlib可绘制数百个矩形轮廓

Python Matplotlib可绘制数百个矩形轮廓,python,python-3.x,matplotlib,plot,graph,Python,Python 3.x,Matplotlib,Plot,Graph,我想使用matplotlib绘制一些矩形轮廓。问题是,我需要大量的矩形,所以绘制矩形的“正常”方式非常慢。我用计算机解决了这个问题。问题是,我再也不能使用fill=None或edgecolor=…和facecolor=None来绘制矩形的边缘 请参见我的代码的示例: 将numpy导入为np 将matplotlib.pyplot作为plt导入 从matplotlib.collections导入PatchCollection 从matplotlib.patches导入矩形 def绘图_矩形_自_区域

我想使用matplotlib绘制一些矩形轮廓。问题是,我需要大量的矩形,所以绘制矩形的“正常”方式非常慢。我用计算机解决了这个问题。问题是,我再也不能使用
fill=None
edgecolor=…
facecolor=None
来绘制矩形的边缘

请参见我的代码的示例:

将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.collections导入PatchCollection
从matplotlib.patches导入矩形
def绘图_矩形_自_区域(区域、颜色):
“”“用颜色为给定区域绘制矩形”“”
返回矩形(xy=(面积[“最小x”]、面积[“最小y”]、宽度=面积[“最大x”]-面积[“最小x”],
高度=面积[“最大值”]-面积[“最小值”],
填充=无)#线宽=0,边颜色=颜色,面颜色=无,zorder=100,alpha=0,
样本面积=[{“最小值”:-1,“最大值”:0.4,“最小值”:0.7,“最大值”:1},
{“min_x”:0.5,“max_x”:1,“min_y”:0.1,“max_y”:0.5}]
矩形=[]
图,ax=plt.子批次()
# ... 通过网格打印一些轮廓
如果样本区域:
对于样本区域中的区域i:
矩形。追加(从区域(区域i,color=“r”)打印矩形)
#   ... 还有一些案子
#一次附加所有矩形,而不是单独附加矩形,请参见:
# https://stackoverflow.com/questions/33905305/how-to-speed-up-the-plot-of-a-large-number-of-rectangles-with-matplotlib
ax.add_集合(PatchCollection(矩形))
# ... 图例、保存、网格。。。
plt.show()
首先,我为所有矩形创建一个数组,并将其附加到数组中,然后使用PatchCollection对其进行打印。下面的示例执行完全相同的操作,只是没有PatchCollection,并且工作正常

将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.collections导入PatchCollection
从matplotlib.patches导入矩形
def绘图_矩形_自_区域(区域、颜色):
“”“从给定区域打印矩形”“”
返回矩形(xy=(面积[“最小x”]、面积[“最小y”]、宽度=面积[“最大x”]-面积[“最小x”],
高度=面积[“最大值”]-面积[“最小值”],
填充=无)#线宽=0,边颜色=颜色,面颜色=无,zorder=100,alpha=0,
样本面积=[{“最小值”:-1,“最大值”:0.4,“最小值”:0.7,“最大值”:1},
{“min_x”:0.5,“max_x”:1,“min_y”:0.1,“max_y”:0.5}]
图,ax=plt.子批次()
如果样本区域:
对于样本区域中的区域i:
ax.添加补丁(从区域(区域i,color=“r”)绘制矩形)
plt.show()
下面是我用这两种代码创建的一些图。左边是使用慢速方法得到的预期结果,右边是我使用PatchCollection得到的结果:

我尝试了多种填充、edgecolor、facecolor的组合,甚至还尝试了zorder的建议


是否可以使用创建矩形的“快速”方法并仅显示边框?

是-查看文档,有一个名为
match_original
的参数,当
True
时,该参数将设置面片的属性以匹配原始矩形的属性

所以只要改变就行了

ax.add_collection(PatchCollection(rectangles))


谢谢,那很容易。好像我忽略了那个参数。为我工作
ax.add_collection(PatchCollection(rectangles, match_original=True))