使用matplotlib的hlines、vlines绘图如何让外拐角完全齐平无空隙
Matplotlib hlines/vlines拐角空隙问题解决方案
问题原因
单独调用hlines、vlines绘制横竖线时,线条默认端点样式为平切模式,相邻线条交汇的外拐角处不会互相覆盖,因此会出现明显缺口。
解决方案
方案1:使用连续路径绘制(推荐)
将所有横竖线的坐标按顺序拼接为连续路径,一次性绘制即可自动实现拐角无缝效果,路径默认的拐角连接样式会自动处理齐平问题,适合自定义不规则形状场景:
import matplotlib.pyplot as plt fig, ax = plt.subplots() # 按路径顺序整理坐标点 x_coords = [0.2, 0.6, 0.6, 0.8, 0.8, 0.5, 0.5, 0.2] y_coords = [0.2, 0.2, 0.8, 0.8, 1.1, 1.1, 0.4, 0.4] # 绘制连续路径 ax.plot(x_coords, y_coords, linewidth=10, color='k') # 可根据需求调整坐标轴范围 ax.set_xlim(0.1, 0.9) ax.set_ylim(0.1, 1.2) plt.show()
方案2:保留hlines/vlines的调整方案
如果必须单独调用hlines、vlines绘制,可通过修改线条端点样式实现拐角覆盖,将参数solid_capstyle设置为'projecting'即可,该样式会让线条端点向外延伸半个线宽的长度,刚好覆盖拐角空隙:
import matplotlib.pyplot as plt fig, ax = plt.subplots() # 每条线都添加solid_capstyle参数 ax.vlines(x=0.6, ymin=0.2, ymax=0.8, linewidth=10, solid_capstyle='projecting') ax.hlines(y=0.2, xmin=0.2, xmax=0.6, linewidth=10, solid_capstyle='projecting') ax.hlines(y=0.8, xmin=.6, xmax=0.8, linewidth=10, solid_capstyle='projecting') ax.vlines(x=0.8, ymin=0.8, ymax=1.1, linewidth=10, solid_capstyle='projecting') ax.hlines(y=1.1, xmin=.5, xmax=0.8, linewidth=10, solid_capstyle='projecting') ax.vlines(x=0.5, ymin=0.4, ymax=1.1, linewidth=10, solid_capstyle='projecting') ax.hlines(y=.4, xmin=.2, xmax=0.5, linewidth=10, solid_capstyle='projecting') plt.show()
方案3:规则矩形场景专用
如果仅需绘制矩形,直接使用matplotlib.patches.Rectangle接口即可原生实现无缝拐角,代码如下:
import matplotlib.patches as pt import matplotlib.pyplot as plt fig, ax = plt.subplots() frame = pt.Rectangle((0.2,0.2), 0.4, 0.6, lw=10, facecolor='none', edgecolor='k') ax.add_patch(frame) plt.show()
内容的提问来源于stack exchange,提问作者baxx
相关产品推荐
相关产品推荐

