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

如何在seaborn distplot中显示所有自定义步长为1的bins

问题解决方法

你的代码存在几处语法和逻辑错误,调整后即可实现步长为1的bin展示:

  • 首先是x的赋值错误,你没有将示例字典转换为pandas DataFrame,错误定义为了嵌套列表,无法调用.columns属性
  • 循环内调用sns.distplot时传入了全量DataFrame,没有传入当前列的数值
  • set_xticklabels写在了循环外部,仅对最后一个子图生效,且没有提前指定xtick的位置,容易出现标签错位
  • 额外提示:seaborn的distplot在最新版本已经被弃用,更推荐使用histplot实现同样的频次统计效果

修正后完整代码

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

# 正确构造DataFrame
df = {'a':[90.45,90.2,91.55,96.84,89.68,94.06,96.26,94.88,85.00,98.35,88.80,94.62,96.94,91.79],
      'b':[89.48,89.47,89.48,89.48,89.48,89.23,98.26,90.46,97.27,94.85,92.45,94.85,99.47,101.17]}
x = pd.DataFrame(df)

fig, axes = plt.subplots(nrows = 2, ncols = 1, constrained_layout=True)    
axes = axes.flatten()         
fig.set_size_inches(10, 15)

# 提前定义bins和刻度值
bins = range(90, 101, 1)
xticks = list(bins)

for ax, col in zip(axes, x.columns):
    # 传入当前列的数值,指定bins、关闭kde
    sns.distplot(x[col], ax=ax, bins=bins, kde=False)
    # 每个子图单独设置x轴刻度和标签
    ax.set_xticks(xticks)
    ax.set_xticklabels(xticks)
    # 可选:添加x轴范围限制让bin和刻度对齐更精准
    ax.set_xlim(89.5, 100.5)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:24:05