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

Seaborn displot:如何控制每个子图的字体大小与刻度旋转?

解决seaborn多子图xticks设置仅最后一个生效的问题

当你用seaborn的col参数绘制多子图直方图时,直接调用plt.xticks()只会作用于最后一个子图——这是因为plt.xticks()默认只操作当前活跃的坐标轴。要让所有子图都应用设置,有两种简单的方法:

方法1:利用FacetGrid的统一设置接口

seaborn通过col生成的多子图会返回一个FacetGrid对象,它自带批量设置刻度的方法set_xticklabels,直接调用就能一次性修改所有子图的x轴刻度:

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

# 生成示例数据
df = pd.DataFrame({
    'value': np.random.randn(1000),
    'category': np.tile(['A', 'B', 'C'], 334)[:1000]
})

# 绘制多列直方图
g = sns.displot(data=df, x='value', col='category')

# 统一设置所有子图的x轴刻度字体大小和旋转角度
g.set_xticklabels(fontsize=12, rotation=45)

plt.show()

方法2:遍历所有子图坐标轴逐个设置

如果需要更灵活的自定义(比如给不同子图设置不同参数),可以遍历FacetGrid的axes属性,对每个子图单独设置:

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

df = pd.DataFrame({
    'value': np.random.randn(1000),
    'category': np.tile(['A', 'B', 'C'], 334)[:1000]
})

g = sns.displot(data=df, x='value', col='category')

# 遍历所有子图,逐个设置x轴刻度
for ax in g.axes.flat:
    ax.tick_params(axis='x', labelsize=12, rotation=45)

plt.show()

不管你用的是displot、histplot配合col参数,还是其他基于FacetGrid的绘图函数(比如catplot),这两种方法都能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:32:08