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

Matplotlib如何增大绘图容器高度?实现大字号图例适配容器

解决Matplotlib容器高度不足容纳大字号图例的问题

你遇到的核心困扰是:想要放大图例字号,但绘图容器高度不够;之前靠设置yticks包含1.2来增高容器,却又不想显示这个多余的刻度。其实只需要把刻度显示设置和坐标轴范围设置分开处理,就能完美解决这个问题——你自己摸索出的方案非常靠谱,我帮你整理成清晰的步骤和代码:

核心思路

  • 用set_yticks()指定你需要显示的刻度(比如[0.2,0.4,0.6,0.8]),只保留有用的刻度标记
  • 用set_ylim()扩展y轴的实际范围(比如上限设为1.2),这样容器高度会被拉高,足够容纳放大后的图例,同时不会显示额外的刻度

修改后的完整代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

e3dssim = [0.879, 0.810, 0.798]
v3dssim = [0.866, 0.852, 0.846]
ssim = e3dssim + v3dssim
e3dpsnr = [29.31, 27.24, 26.82]
v3dpsnr = [28.31, 27.89, 27.66]
psnr = e3dpsnr + v3dpsnr
T = [r'$x_{1:10}\rightarrow \hat{x}_{11:30}$',r'$x_{1:10}\rightarrow \hat{x}_{11:50}$',r'$x_{1:10}\rightarrow \hat{x}_{11:70}$']*2
Method = ["E3D"]*len(e3dssim) + ["Ours"]*len(v3dssim)
df = pd.DataFrame({"SSIM": ssim, "PSNR": psnr, "T":T, "":Method})

labelsize=20
ticksize=20
f, ax = plt.subplots(2,1,figsize=(10,10))

# SSIM子图配置
sns.barplot(x="T", y="SSIM", hue="", data=df, ax=ax[0])
ax[0].tick_params(labelsize=ticksize)
# 仅显示需要的刻度
ax[0].set_yticks([0.2,0.4,0.6,0.8])
# 扩展y轴范围,拉高容器高度以容纳大字号图例
ax[0].set_ylim([0.2,1.2])
ax[0].set_xlabel(xlabel="",fontsize=labelsize)
ax[0].set_ylabel(ylabel="SSIM",fontsize=labelsize)
# 设置放大后的图例字号
ax[0].legend(fontsize=15)

# PSNR子图配置
sns.barplot(x="T", y="PSNR", hue="", data=df, ax=ax[1])
ax[1].tick_params(labelsize=ticksize)
ax[1].set_xlabel(xlabel="",fontsize=labelsize)
ax[1].set_ylabel(ylabel="PSNR",fontsize=labelsize)
ax[1].get_legend().remove()

# plt.savefig("kth.png")
plt.show()

关键细节说明

  • set_yticks()完全控制显示在坐标轴上的刻度值,这里只保留了你需要的0.2/0.4/0.6/0.8
  • set_ylim()负责调整坐标轴的实际范围,把y轴上限设为1.2后,绘图容器的高度会自动适配这个范围,刚好能放下字号为15的图例
  • 这样操作后,既解决了图例被截断的问题,又不会出现多余的1.2刻度标记

内容的提问来源于stack exchange,提问作者Kong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:52:39