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

Matplotlib指定figsize后空白消失、底部图例被截断的问题咨询

问题根源

现有代码的核心问题有2个:

  • Figure创建顺序错误:先创建子图再调整Figure尺寸,会破坏默认布局留白规则
  • 图例锚点设置不合理,且未主动预留底部空白,也没有在导出时让画布适配超出边界的图例元素

解决方案

按以下步骤调整代码即可:

  1. 先创建指定尺寸的Figure,再生成子图,避免布局错乱
  2. 用subplots_adjust主动设置底部留白大小,给图例预留空间
  3. 调整图例锚点参数,将图例固定在子图底部居中位置
  4. 调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 01:18:03