【问题标题】:Set equal bin widths for histogram为直方图设置相等的 bin 宽度
【发布时间】:2019-11-18 15:23:20
【问题描述】:

我需要 4 个不同生物体的 4 个直方图,数据非常多样化,但轴的限制和(更重要的是)所有箱的宽度在每个图中都应该相等。 我有这个代码

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(16, 10))
colors = ['tab:red', 'tab:blue', 'tab:green', 'tab:pink']

for i, (ax, Organism) in enumerate(zip(axes.flatten(), data.Organism.unique())):
    x = data.loc[data.Organism == Organism, 'Protein Length']
    ax.hist(x, density=True, label=str(Organism), color=colors[i], alpha=0.5, rwidth=0.5, bins = 30)
    ax.set_xscale("log")
    ax.set_xlim([min(data["Protein Length"]), max(data["Protein Length"])])

我还应该指定什么来获得 EQUAL bin 宽度?

提前致谢!

【问题讨论】:

    标签: python matplotlib plot histogram


    【解决方案1】:

    首先,您可以使用seaborn 让您的生活更轻松。它建立在matplotlib 之上。处理matplotlib 可能会有点痛苦——代码很多而且它不是无状态的。

    如果您想要更多的代码,请转到plotly

    您始终可以计算您的直方图separately

    【讨论】:

      【解决方案2】:

      你可以自己设置所有的bin,而不是设置bin的数量:

      ax.hist(x, density=True, label=str(Organism), color=colors[i],
                 alpha=0.5, rwidth=0.5, bins=np.linspace(first_bin, last_bin, 30))
      

      其中start_binlast_bin 是直方图的起点和终点。

      【讨论】: