You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:15:07