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
相关产品推荐
相关产品推荐

