如何调整matplotlib.mpatches.Patch图例线条粗细且保留长度?
问题描述
因图中元素过多,手动使用matplotlib.mpatches.Patch创建图例,代码如下:
orange_patch = mpatches.Patch(color='orange', label='n=505 distribution', lw = 1) grey_patch = mpatches.Patch(color = 'grey', label = 'n=100 sampled 100 times', lw = 1) plt.legend(handles=[orange_patch, grey_patch], frameon = False)
目前图例可正常显示,但线条过粗。调整lw参数时,线条的长度和粗细会同时改变,希望仅让线条变细,同时保留原有长度,使其与图中显示的线条粗细一致。
解决方法
你用Patch类来做线条类的图例项本身就不合适——Patch是面状元素,lw控制的是它的边框宽度,你看到的“线条”其实是边框的显示效果,调整lw时会连带改变边框的视觉长度。要实现单独控制线条粗细和长度,换用Line2D来创建图例项更合适:
- 首先导入
Line2D类:
from matplotlib.lines import Line2D
- 创建线条式图例项,直接设置
lw控制粗细,通过handlelength参数固定图例中线条的长度:
orange_line = Line2D([], [], color='orange', label='n=505 distribution', lw=0.5) # lw设为你需要的细线条值 grey_line = Line2D([], [], color='grey', label='n=100 sampled 100 times', lw=0.5) plt.legend(handles=[orange_line, grey_line], frameon=False, handlelength=2) # handlelength控制线条显示长度
如果你的图例原本对应填充区域(而非线条),只是想让区域边框变细且保持图例项大小不变,可直接调整Patch的lw,同时用handleheight和handlelength固定图例项尺寸:
orange_patch = mpatches.Patch(color='orange', label='n=505 distribution', lw=0.5) grey_patch = mpatches.Patch(color='grey', label='n=100 sampled 100 times', lw=0.5) plt.legend(handles=[orange_patch, grey_patch], frameon=False, handleheight=2, handlelength=2)
这样就能实现只调整线条/边框粗细,同时保留图例项的原有显示长度。
内容的提问来源于stack exchange,提问作者user15108227
相关产品推荐
相关产品推荐

