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

如何为Matplotlib子图分别设置不同的Y轴格式?

问题解决:子图Y轴格式未按预期显示

你的代码核心问题出在循环中lambda函数对变量col的引用捕获——循环内定义的lambda不会保存每次循环时col的当前值,而是持有对col变量的引用。当循环结束后,col最终指向最后一列money_col,导致两个子图的Y轴都套用了货币格式。

修正后的完整代码

from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib.ticker import FuncFormatter  # 补充你遗漏的导入

df = pd.DataFrame(data=[[0, 1], [1, 0]], columns=['prc_col', 'money_col'])
fig, axs = plt.subplots(1, 2)
fig.tight_layout(pad=5.0)
formatting_dict = {'prc_col': lambda num: f'{round(num)}%', 'money_col': lambda num: f'${round(num)}'}

for idx, col in enumerate(df.columns):
    ax = axs[idx]
    g = sns.boxplot(data=df, y=col, showfliers=False, ax=ax)
    # 通过默认参数固定当前循环的col值,避免引用滞后问题
    g.yaxis.set_major_formatter(FuncFormatter(lambda x, pos, col=col: formatting_dict[col](x)))

plt.show()

关键修复点

  1. lambda参数绑定:给lambda增加col=col的默认参数,让每次循环时的col值被固定绑定到当前lambda中,不再引用循环变量的最终值。
  2. 补充缺失导入:你的代码漏导入了matplotlib.ticker.FuncFormatter,这会导致运行报错,修正时已补上。

修复后,prc_col对应的子图Y轴会显示百分比格式,money_col对应的子图Y轴会显示货币格式,符合预期需求。

内容的提问来源于stack exchange,提问作者Sanjin Juric Fot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:09:59