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.8set_ylim()负责调整坐标轴的实际范围,把y轴上限设为1.2后,绘图容器的高度会自动适配这个范围,刚好能放下字号为15的图例- 这样操作后,既解决了图例被截断的问题,又不会出现多余的
1.2刻度标记
内容的提问来源于stack exchange,提问作者Kong
相关产品推荐
相关产品推荐

