【发布时间】:2020-07-10 13:04:34
【问题描述】:
我想制作存储在pandasDataFrame 中的数据直方图,其中直方图根据该数据框中的另一列分为两组(我们称其为 target 列,可以是 1或 0)。我无法让两组的垃圾箱以合理的方式对齐。
这是我目前所拥有的:
def fun_histByTarget(df, cols, target):
target = df[target]
if isinstance(cols, str):
cols = [cols]
fig = plt.figure(figsize=(18, 5 * ((len(cols) + 1) // 2)), dpi= 80)
for i in range(len(cols)):
sp = fig.add_subplot((len(cols) + 1) // 2, 2, i + 1)
col = df[cols[i]].copy()
sp.hist(col[target==0], color='red', alpha=.3, label='target = 0', align='left')
sp.hist(col[target==1], color='blue', alpha=.3, label='target = 1', align='left')
sp.legend()
sp.set_title(cols[i])
这是结果:
fun_histByTarget(test, 'integer_col', 'target')
我尝试过手动添加垃圾箱
bins = np.linspace(col.values.min(), col.values.max(), 10)
但这无济于事。结果箱的选择非常奇怪,因此直方图的某些条完全位于两个整数值之间,即使所有数据都是整数。这可能是因为我硬编码了 10 个 bin。但是自动选择正确数量的垃圾箱确实很困难。有没有更好的方法来做到这一点?
【问题讨论】:
标签: python matplotlib