如何在条形图上正确放置条形图

时间:2018-10-25 13:02:23

标签: python matplotlib

我正在尝试生成直方图的条形图,正在使用numpy对一组图像进行计算,但是我的图实际上并未在轴上绘制条形图。我正在使用的代码是:

def makebarplot(bins, values, title = None, export = False,
              path = None, file_name = None):
    '''
    This function will take the outputs
    of np.histogram results and make a 
    barplot of it.
    '''
    #creating the object
    img, ax1 = plt.subplots(figsize = (13,8))

    ax1.bar(bins[:-1],values)

    #adjusting the graphic
    ax1.set_xscale('log')
    ax1.set_yscale('log')
    ax1.set_xlabel('Values')
    ax1.set_xticks(bins)
    ax1.set_ylabel('Frequency')
    ax1.set_title(title)

    plt.show()

    if export is True:
        #saving figure
        img.savefig(path+file_name, bbox_inches = 'tight')

    #closing the plot    
    #plt.close()

    return

#the bins I'm using
bins = [1e1**i for i in range(2,20)]

#the values I'm entering they are the frequency of
# values in between each of the corresponding 
#bins defined above
values = [0.000000e+00, 0.000000e+00, 0.000000e+00, 0.000000e+00, 
          1.000000e+00, 1.000000e+01, 1.100000e+02, 8.870000e+02, 
          6.582000e+03, 4.542300e+04, 2.630240e+05, 1.090866e+06, 
          2.281769e+06, 1.199336e+06, 4.057230e+05,
          6.878300e+04, 1.211000e+03]

makebarplot(bins,ar_values)

我从中得到的结果是: current attempt

此图应类似于此的条形图: enter image description here

我想念什么?

我正在咨询post,这表明这可能是由于条形位置不正确而发生的,但是,我未能掌握将其与数据连接的概念,或者如果我丢失了某些内容其他。

我也不明白为什么我必须修剪其中一个垃圾箱,所以值和垃圾箱应具有相同的长度。由于结果将介于两者之间,因此自然而然地我会假定垃圾箱的长度比包含值的列表长一倍。

1 个答案:

答案 0 :(得分:1)

仅因为您命名了bins条的位置,并不意味着它们成为垃圾箱。 (如“我将汽车命名为“法拉利”,但并没有变成红色。”)

因此,这里发生的是条形图放置在箱的左边缘(如您将bins[:-1]指定为位置)。但是,未指定条的宽度,因此matplotlib采用默认的1单位条宽度。一个规模超过20个数量级的单元确实很小。实际上,在13英寸宽,dpi为100的图形上,您的分辨率大约是每个像素7e14个单位,比1大得多。

最后,也可以定义条的宽度。然后,您还需要将这些条对齐到其左边缘。

ax1.bar(bins[:-1],values, width=np.diff(bins), align="edge", ec="k")

(这里npnumpy

enter image description here

请注意,前四个小节丢失了,因为它们的高度为0,在对数刻度上未定义。