Matplotlib及Seaborn如何将自定义不等距分箱设置为相同显示宽度
自定义不等宽分箱实现等宽显示直方图解决方案
问题根因
你当前使用的sns.displot绘制直方图时,默认采用数值型x轴,会严格按照你定义的分箱的实际数值间隔分配x轴显示宽度,因此宽度更大的分箱(如056)会比小间隔分箱(如5660)显示得更宽,这是直方图的默认数学表现,但不符合你的可视化展示需求。
解决方案
你需要的本质是按自定义区间分组后的等宽频数柱状图,先对原始成绩做分箱编码,再用分类轴的柱状图绘制即可,完整调整代码如下:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt sns.set_style('darkgrid') newBins = [0,56,60,65,70,80,85,90,95,100] # 自定义分箱显示标签 bin_labels = [f'{newBins[i]}~{newBins[i+1]}' for i in range(len(newBins)-1)] # 对原始成绩做分箱处理,include_lowest=True保证边界值0被正确归类 scores_binned = pd.cut(scores, bins=newBins, labels=bin_labels, include_lowest=True) # 绘制等宽柱状图 sns.countplot(x=scores_binned) plt.xlabel('grade') plt.ylabel('count') # 若分箱标签显示拥挤可打开下方注释调整旋转角度 # plt.xticks(rotation=30) plt.show()
效果说明
该方案将x轴转换为分类轴,每个分箱对应一个分类项,所有分类项的显示宽度完全一致,同时保留了你自定义的分箱统计逻辑,最终呈现效果完全符合需求。
内容的提问来源于stack exchange,提问作者itay k
相关产品推荐
相关产品推荐

