如何使Seaborn中两个distplot在同一坐标轴上精确重叠?
解决Seaborn distplot直方图偏移重叠问题
嘿,我来帮你搞定这个直方图偏移的问题!你现在遇到的情况是两个distplot的直方图没有对齐,原因其实很简单——虽然你设置了相同的bins数量,但两个数据集的数值范围对应的bin边界没有统一,导致它们的柱子错开了。
要让两个直方图精确重叠,关键是手动指定统一的bins区间,而不是只给bins的数量。这样两个直方图会使用完全相同的分组边界,自然就能对齐了。
修改后的代码如下:
import numpy as np import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(10,8)) # 手动设置统一的bins区间,从600到855(左闭右开,所以要到855才能包含850),步长25 bins = np.arange(600, 855, 25) # 第一个直方图使用统一的bins ax1 = sns.distplot(loans['fico'][loans['credit.policy']==1], bins=bins, kde=False, hist_kws=dict(edgecolor='k', lw=1)) # 第二个直方图同样使用这个bins ax2 = sns.distplot(loans['fico'][loans['credit.policy']==0], bins=bins, color='Red', kde=False, hist_kws=dict(edgecolor='k', lw=1)) # 统一设置x轴范围,其实这里因为bins已经限定了范围,这一步可以省略,但保留也没问题 plt.xlim([600, 850]) plt.show()
为什么原来的代码会偏移?
原来你只设置了bins=10,Seaborn会自动根据每个数据集的最小值和最大值来计算bin的边界。两个数据集的极值可能略有不同,导致生成的bin区间位置不一样,最终就出现了柱子错开的情况。手动指定bins的区间后,两个直方图会严格使用相同的分组规则,就能完美重叠啦。
内容的提问来源于stack exchange,提问作者IanT
相关产品推荐
相关产品推荐

