Matplotlib指定figsize后空白消失、底部图例被截断的问题咨询
问题根源
现有代码的核心问题有2个:
- Figure创建顺序错误:先创建子图再调整Figure尺寸,会破坏默认布局留白规则
- 图例锚点设置不合理,且未主动预留底部空白,也没有在导出时让画布适配超出边界的图例元素
解决方案
按以下步骤调整代码即可:
- 先创建指定尺寸的Figure,再生成子图,避免布局错乱
- 用
subplots_adjust主动设置底部留白大小,给图例预留空间 - 调整图例锚点参数,将图例固定在子图底部居中位置
- 调用
savefig时添加bbox_inches='tight'参数,确保导出的画布包含所有可见元素
调整后可运行代码
# 先创建指定尺寸的figure plt.figure(111, figsize=(3,3)) # 再创建子图 fig = plt.subplot(111) plots = [] legend = [] # 原有绘图逻辑保持不变 plt.plot(k_array, avgNDCG, 'red') legend.append("eco overall F1") if data_loader.GSQb: legend.append("GSQ F1") plt.plot(k_array, avgGSQNDCG, 'orange') if data_loader.BSQb: legend.append("BSQ F1") plt.plot(k_array, avgBSQNDCG, 'purple') if data_loader.GWQb: legend.append("GWQ F1") plt.plot(k_array, avgGWQNDCG, 'black') if data_loader.BWQb: legend.append("BWQ F1") plt.plot(k_array, avgBWQNDCG, 'green') if data_loader.GAQb: legend.append("GAQ F1") plt.plot(k_array, avgGAQNDCG, 'blue') # 调整底部留白,数值越大底部空白越多,可根据实际显示效果调整 plt.subplots_adjust(bottom=0.2) # 调整图例锚点:0.5对应子图水平居中,-0.15对应子图底部下方的位置 fig.legend(legend, loc='upper center', bbox_to_anchor=(0.5, -0.15), fontsize='xx-small') # 导出时添加bbox_inches参数,自动适配画布范围包含所有元素 plt.savefig("RARE " + metaCat + " best avg NDCG scores", bbox_inches='tight')
补充说明
如果图例还是显示不全,可以适当调大subplots_adjust的bottom参数,或者调小bbox_to_anchor的第二个数值(比如改成-0.2),直到图例完全显示即可。
内容的提问来源于stack exchange,提问作者javaMan
相关产品推荐
相关产品推荐

