如何去除Matplotlib中透明矩形的多余边界?
解决Matplotlib透明矩形出现多余边界的问题
方法一:消除矩形边缘渲染
默认情况下,Matplotlib的矩形补丁会带有与填充色一致的边缘,即使未显式设置边缘宽度,开启透明度后,边缘的叠加会产生可见边界。只需给矩形添加edgecolor='none'和linewidth=0参数即可解决:
import matplotlib import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111, aspect=1) for i in range(5, 30, 5): for j in range(5, 30, 5): rect = matplotlib.patches.Rectangle((i, j), 5, 5, color='blue', alpha=0.2, edgecolor='none', linewidth=0) ax.add_patch(rect) plt.xlim([0, 45]) plt.ylim([0, 45]) plt.show()
方法二:使用imshow绘制规则网格(更高效)
如果只是绘制规则排列的矩形网格,用imshow替代逐个添加矩形补丁,能从根源避免边界问题,同时渲染效率更高:
import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() ax.set_aspect(1) # 创建对应5x5网格的数值矩阵,值对应透明度 grid = np.full((5,5), 0.2) # 绘制网格,extent参数匹配原坐标范围,每个单元格尺寸为5 ax.imshow(grid, cmap='Blues', alpha=1, extent=[5, 30, 5, 30], vmin=0, vmax=1) plt.xlim([0, 45]) plt.ylim([0, 45]) plt.show()
补充说明
调整矩形尺寸后仍有边界,是因为Matplotlib的抗锯齿渲染会对边缘做模糊处理,透明状态下相邻边缘的模糊区域叠加会显现深色线条。通过消除边缘渲染或改用更适配的绘制方式,就能彻底解决该问题。
内容的提问来源于stack exchange,提问作者lifezbeautiful
相关产品推荐
相关产品推荐

