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

Seaborn distplot柱状图与X轴刻度不匹配问题求助

解决Seaborn displot柱状图与X轴刻度不对齐的问题
  • 问题:使用seaborn.displot()生成图表时,X轴刻度始终无法与柱状图对齐,期望实现如图中11和15位置那样的刻度与柱状图一一对应的关系。

Seaborn displot刻度对齐示例

最小可复现代码

import numpy as np
import pandas as pd
import seaborn as sns

# 生成数据
np.random.seed(42)
n = 5000
df = pd.DataFrame({
    'PERSON': np.random.randint(100000, 999999, n),
    'Fruit': np.random.choice(['Banana', 'Strawberry'], n),
    'Age': np.random.randint(9, 18, n)
})

fig = sns.displot(
    data=df,
    x='Age',
    hue='Fruit',
    multiple='dodge').figure

fig.show() 

解决方法

因为Age是离散的整数型变量,Seaborn默认会将其当作连续变量处理,导致刻度和柱状图错位。可以通过以下两种方式修复:

方法1:指定discrete=True参数

在displot中添加discrete=True,明确告诉Seaborn这是离散数据,它会自动调整X轴刻度与柱状图对齐:

fig = sns.displot(
    data=df,
    x='Age',
    hue='Fruit',
    multiple='dodge',
    discrete=True).figure
fig.show()

方法2:手动设置X轴刻度

如果需要更精细的控制,可以手动获取柱状图的位置,然后设置对应的刻度标签:

import matplotlib.pyplot as plt

fig = sns.displot(
    data=df,
    x='Age',
    hue='Fruit',
    multiple='dodge').figure

# 获取第一个子图
ax = fig.axes[0]
# 获取所有柱状图的中心位置
bar_centers = [patch.get_x() + patch.get_width()/2 for patch in ax.patches]
# 提取唯一的中心位置(因为有两种水果,每个Age对应两个柱子)
unique_centers = sorted(list(set(bar_centers)))
# 获取对应的Age值
age_values = sorted(df['Age'].unique())
# 设置X轴刻度和标签
ax.set_xticks(unique_centers)
ax.set_xticklabels(age_values)

fig.show()

说明

方法1更简洁,适合大多数离散数据的情况;方法2适合需要自定义刻度位置或标签的场景。两种方法都能实现X轴刻度与柱状图的精准对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:06:04