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

