Python matplotlib直方图箱宽的变化

Python matplotlib直方图箱宽的变化,python,matplotlib,histogram,Python,Matplotlib,Histogram,我正在matplotlib中创建一个柱状图,但遇到了一些问题,因为当这些条的宽度都应该相同时,它们的宽度会发生变化。这方面的一个例子如下: 在图像中,左栏具有完整的直方图,右栏在完整直方图的部分中放大。在完整的柱状图中,由于一些未知的原因,两个试验之间的条形图宽度不同,在缩放的右侧,它们的条形图大小相同。我希望他们有相同大小的酒吧,其中rwidth=1,并没有间隙相邻的垃圾箱 当我将rwidth设置为默认值时,以及当我将其设置为1时,都会发生这种情况。有人问了一个类似的问题,但似乎与不同的刻度

我正在matplotlib中创建一个柱状图,但遇到了一些问题,因为当这些条的宽度都应该相同时,它们的宽度会发生变化。这方面的一个例子如下:

在图像中,左栏具有完整的直方图,右栏在完整直方图的部分中放大。在完整的柱状图中,由于一些未知的原因,两个试验之间的条形图宽度不同,在缩放的右侧,它们的条形图大小相同。我希望他们有相同大小的酒吧,其中rwidth=1,并没有间隙相邻的垃圾箱

当我将rwidth设置为默认值时,以及当我将其设置为1时,都会发生这种情况。有人问了一个类似的问题,但似乎与不同的刻度范围或重叠条的轮廓有关,这两个问题都不适用于我的图表

有人知道为什么我的垃圾箱的宽度不同,或者我还能做些什么使它们保持相同的宽度吗?

我使用的代码如下所示:

def graph_pvalues(both, selective, clearcut, trials, location):
    # define overall figure
    plt.figure(figsize=(16, int(project_images*(trials*0.15 + 0.5))))
    gs = gridspec.GridSpec(project_images-1, 3) 

    # plot one graph per substack size
    for v in range(project_images-1):
        # define subsets of data being graphed, remove nan values, and combine
        S_sub = selective[:, v]
        C_sub = clearcut[:, v]
        B_sub = both[:, v]
        graphed_data = [B_sub[~np.isnan(B_sub)], S_sub[~np.isnan(S_sub)], C_sub[~np.isnan(C_sub)]]

        # plot main graph
        ax1 = plt.subplot2grid((project_images-1, 3), (v, 0), colspan=2)
        ax1.hist(graphed_data, bins=50, rwidth=1, label=['both', 'selective', 'clearcut'])
        ax1.axis([0, 1, 0, trials])
        ax1.set_title("Disturbance at the %s using a substack of %i images" % (location, v+1))
        ax1.set_xlabel("p-value")
        ax1.set_ylabel("Number of trials")
        ax1.legend(prop={'size': 10})

        # plot zoom graph for 0 to 0.1
        ax2 = plt.subplot2grid((project_images-1, 3), (v, 2))
        ax2.hist(graphed_data, bins=10, range=(0, 0.1), label=['both', 'selective', 'clearcut'])
        ax2.axis([0, 0.1, 0, trials])
        ax2.set_title("Zoom 0 - 0.1 (%s, %i images)" % (location, v+1))
        ax2.set_xlabel("p-value")
        ax2.legend(prop={'size': 10})

    plt.tight_layout()

    plt.show()
正如注释中所指出的,除非在打印时专门设置范围参数,否则箱子将分布在数据范围内。所以在我的例子中,对于一些线条,范围是0-0.18,在其他地方是0-0.98,因此导致了线条宽度的变化。解决方案是将直方图线修改为:

ax1.hist(graphed_data, bins=50, range=(0,1), label=['both', 'selective', 'clearcut'])

使用range参数,并且rwidth参数是不相关和可选的。

我怀疑宽度是不同的,因为您总是使用相对宽度1,
rwidth=1
。这样做的目的是什么?为什么不删除它?即使我不使用rwidth参数,也存在同样的问题。我试着用它来看看我是否可以强制所有的条都是相同的宽度。因此,如果你有50个在0到1之间的条,它们的宽度将比你在该范围内只有10个条的宽度小5倍,对吗?是的,这就是为什么左图和右图的宽度不同(如预期的那样)。我的问题是,为什么左边两张图中的条形图的宽度不同,而它们都有50个箱子分布在0和1之间?因为它们显然不分布在相同的范围内。查看图像,第一个数据集从0扩展到0.9,而第二个数据集从0扩展到0.18。