如何在循环中为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
相关产品推荐
相关产品推荐

