使用matplotlib的hlines、vlines绘制外拐角完整的矩形
解决matplotlib用hlines/vlines绘制矩形拐角缺口问题
拐角缺口是matplotlib默认线条属性导致的:默认独立线段的端点样式为butt(平头截断),横竖线段仅在坐标点边缘重叠,外侧自然会出现缺口,可通过以下几种方案解决:
方案1:使用闭合路径绘制(最推荐)
直接绘制连续的闭合矩形路径,通过设置拐角连接样式实现齐平效果,代码最简单:
import matplotlib.pyplot as plt fig, ax = plt.subplots() # 按 左下角→右下角→右上角→左上角→左下角 顺序定义坐标,形成闭合路径 x_coords = [0.2, 0.6, 0.6, 0.2, 0.2] y_coords = [0.2, 0.2, 0.8, 0.8, 0.2] # solid_joinstyle设为miter即可得到尖锐齐平的外拐角 ax.plot(x_coords, y_coords, linewidth=10, solid_joinstyle='miter', color='#1f77b4') plt.show()
方案2:使用Rectangle补丁绘制
直接调用matplotlib内置的矩形类,原生支持闭合边框,无需手动调整线条参数:
import matplotlib.pyplot as plt from matplotlib.patches import Rectangle fig, ax = plt.subplots() # 参数依次为:左下角x坐标、左下角y坐标、矩形宽度、矩形高度 rect = Rectangle( xy=(0.2, 0.2), width=0.4, height=0.6, linewidth=10, facecolor='none', edgecolor='#1f77b4' ) ax.add_patch(rect) plt.show()
方案3:保留原hlines/vlines写法的调整方案
如果必须沿用现有hlines/vlines的写法,只需给每条线段添加solid_capstyle='projecting'参数,让线段端点自动向外延伸半个线宽的长度,补全拐角缺口:
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.vlines(x=0.2, ymin=0.2, ymax=0.8, linewidth=10, solid_capstyle='projecting') 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=0.2, xmax=0.6, linewidth=10, solid_capstyle='projecting') plt.show()
内容的提问来源于stack exchange,提问作者baxx
相关产品推荐
相关产品推荐

