Matplotlib中PatchCollection绘制多边形存在间隙问题排查与解决
修复Matplotlib PatchCollection绘制贴合多边形时的间隙问题
这个视觉间隙并非代码逻辑错误,而是Matplotlib渲染机制导致的:两个多边形的共享边在坐标上完全重合,但默认的抗锯齿渲染和集合边缘处理会让边缘产生半透明过渡效果,从而显现出间隙。
以下是几种可行的修复方案:
方案1:关闭抗锯齿
直接禁用PatchCollection的抗锯齿功能,消除边缘的半透明过渡:
import matplotlib.pyplot as plt from matplotlib.collections import PatchCollection from matplotlib.patches import Polygon fig, ax = plt.subplots() points1 = [[ 0., 0.], [10., 0.], [10., 10.], [ 0., 8.]] points2 = [[10., 0.], [10., 10.], [20., 10.], [18., 0.]] # 添加antialiased=False参数 pc = PatchCollection([Polygon(points1), Polygon(points2)], antialiased=False) ax.add_collection(pc) ax.autoscale_view() plt.show()
方案2:隐藏边缘线条
默认情况下PatchCollection会绘制多边形的边缘线,即使宽度很小,也可能在渲染时产生间隙。可以将边缘宽度设为0或隐藏边缘颜色:
# 方法A:设置linewidth=0 pc = PatchCollection([Polygon(points1), Polygon(points2)], linewidth=0) # 方法B:设置edgecolor='none' pc = PatchCollection([Polygon(points1), Polygon(points2)], edgecolor='none')
这种方法保留抗锯齿效果,同时消除间隙,适合需要平滑边缘的场景。
方案3:合并为单个多边形
如果两个多边形在逻辑上属于同一整体,可以将它们的顶点合并为一个Polygon对象,从根源上避免边缘重叠问题:
# 合并顶点(去掉重复的共享点) combined_points = points1 + points2[1:] pc = PatchCollection([Polygon(combined_points)])
内容的提问来源于stack exchange,提问作者yvrob
相关产品推荐
相关产品推荐

