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

如何在循环中为Seaborn子图设置自定义X轴标签?

解决循环生成Seaborn分布图时自定义X轴标签的问题

首先先修正你代码里的语法错误:

  • data2字典中,var1的元素间应该用逗号分隔(把.改成,)
  • var2行末尾缺少逗号

接下来解决循环中传递自定义X轴标签的问题:你可以用zip()函数同时遍历t1.columns和xlabel_list,这样每次循环都能拿到当前列名和对应的自定义标签,再传入函数即可。

修正后的完整代码如下:

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

data1 = {
    'var1': [1, 2, 3, 4],
    'var2': [20, 21, 19, 18],
    'var3': [5, 6, 7, 8]
}

# 修正data2的语法错误
data2 = {
    'var1': [5, 2, 3, 5],
    'var2': [21, 18, 3, 11],
    'var3': [1, 9, 3, 6]
}

t1 = pd.DataFrame(data1)
t2 = pd.DataFrame(data2)

xlabel_list = ["new_var1", "new_var2", "new_var3"]

def fun1(df1, df2, numvar, new_label):
    fig, ax = plt.subplots(1, 2, figsize=(10, 4))  # 设置图大小优化布局
    sns.kdeplot(data=df1[numvar], linewidth=3, ax=ax[0])
    sns.kdeplot(data=df2[numvar], linewidth=3, ax=ax[1])

    # 为两个子图设置自定义X轴标签
    ax[0].set_xlabel(new_label, weight='bold', size=10)
    ax[1].set_xlabel(new_label, weight='bold', size=10)
    plt.tight_layout()  # 调整布局避免标签重叠

# 用zip同时遍历列名和自定义标签列表
for col, new_label in zip(t1.columns, xlabel_list):
    fun1(df1=t1, df2=t2, numvar=col, new_label=new_label)

plt.show()

关键说明:

  • zip(t1.columns, xlabel_list)会将列名(var1/var2/var3)和对应的自定义标签(new_var1/new_var2/new_var3)一一配对,每次循环取出一组传给函数。
  • 把plt.tight_layout()移到函数内部的绘图之后,能更好地调整子图布局,避免标签被截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:15:49