matplotlib中组合LineCollection等元素时图例句柄不对齐怎么调整
问题原因
你遇到的图例错位是因为LineCollection、fill_between返回的PolyCollection、scatter返回的PathCollection属于不同类型的绘图元素,生成图例时默认的垂直偏移参数不统一,散点标记和折线的基线没有对齐。
解决方法
引入Matplotlib的HandlerTuple处理器统一管控组合句柄的对齐参数,同时调整散点的垂直偏移量让三者居中对齐,修改后的代码如下:
首先导入依赖:
from matplotlib.legend_handler import HandlerTuple
修改图例调用逻辑:
lc = LineCollection(segments, cmap='turbo',zorder=3) p1 = ax.add_collection(lc) p2 = ax.fill_between(x, errmin,errmax, color=colors[1],zorder=2) ps = ax.scatter(x,y,marker='o',s=1,c=y,cmap='turbo',zorder=4) ax.legend( [(p2, p1, ps)], ["(min/avg/max)"], fontsize=tinyfont, facecolor='white', loc='lower right', # 新增以下参数解决对齐问题 handler_map={tuple: HandlerTuple(ndivide=None)}, scatteryoffsets=[0.5], # 让散点在图例项高度的居中位置 handleheight=1.2 # 调整图例项高度避免元素挤压 )
如果调整后还有轻微偏移,可以微调scatteryoffsets的数值(取值0到1之间,对应图例项高度的比例位置),或者调整handlelength参数适配你的字体大小。
内容的提问来源于stack exchange,提问作者Filipe
相关产品推荐
相关产品推荐

