You need to enable JavaScript to run this app. 如何在matplotlib子图绘制的Seaborn散点图中旋转x轴刻度标签
优惠活动
大模型
产品
解决方案
定价
更多

如何在matplotlib子图绘制的Seaborn散点图中旋转x轴刻度标签

子图场景下Seaborn散点图旋转x轴刻度标签的正确实现方式

常见报错与失效原因

  • 直接调用ax1.xticks(rotation=90)、g1.xticks(rotation=90)报错:xticks()是pyplot层面的全局操作函数,并非单个AxesSubplot子图实例的内置方法,因此子图对象无法直接调用该接口。
  • 直接调用set_xticklabels()导致标签丢失:Seaborn绘制分类型散点图时,Matplotlib会自动适配分类轴的刻度定位规则,如果没有对齐刻度位置与标签的映射关系,强行重新设置标签就会出现原有内容丢失的问题。

可落地的实现方案

方案1(推荐):使用Axes对象的tick_params方法

该方法不会修改原有刻度标签的内容,仅通过参数控制刻度样式,完全避开手动设置标签的丢失风险,写法简洁稳定:

# 针对ax1(即散点图所在的子图)设置x轴刻度旋转90度
ax1.tick_params(axis='x', rotation=90)

注:Seaborn绘图时传入ax=ax1参数后,返回的对象g1与ax1是同一个Axes实例,因此写g1.tick_params(axis='x', rotation=90)效果完全一致。

方案2:手动配置标签的旋转属性

如果需要自定义标签排版,必须先对齐刻度位置与标签的映射关系,再设置旋转角度,同时补充对齐参数避免标签偏移:

# 先获取当前x轴的刻度位置,保证标签与刻度一一对应
xticks = ax1.get_xticks()
# 匹配现有标签内容,设置旋转角度与对齐方式
ax1.set_xticklabels(ax1.get_xticklabels(), rotation=90, ha='center')

完整可运行代码示例

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

sns.set_context("talk", font_scale=1.4) 

df = pd.DataFrame({'id': ['aaaaaaa','bbbbbb1','bbbbbb2','ccccc','dddddd','eeeee'],
                   'y': [7,2,5,8,3,7],
                   'cat': ['X','Y','Y','X','Z','X']
                  })

fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(8,4),
                               gridspec_kw=dict(width_ratios=[2, 1]),
                              )

g1 = sns.scatterplot(data=df,
                    x='id', y='y', hue='cat',
                    s=200, ax=ax1, legend=False,
                   )

g2 = sns.histplot(data=df, y='y', 
                  hue='cat', ax=ax2, binwidth=2, 
                  multiple='stack', legend=False,
                 )

# 执行x轴刻度旋转
ax1.tick_params(axis='x', rotation=90)
# 自动调整画布边距,避免旋转后的标签被裁切
plt.tight_layout()

plt.show()

注意:旋转刻度后建议补充plt.tight_layout()语句,自动适配元素间距,避免长文本的刻度标签被画布边缘裁切。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 07:24:03