matplotlib直方图上的第一个和最后一个条显示为移动

时间:2016-08-02 12:56:54

标签: python matplotlib histogram

我正在尝试使用这些值创建直方图:

[1, 1, 1, 2, 2, 1, 1, 1, 1, 5, 2, 1, 1, 2, 2, 1, 1, 4, 1, 1, 2, 1, 1, 2]

我正在使用的代码就是这个

plt.hist(values, histtype='bar', color='green', alpha=0.5)
plt.title(library_name, fontsize=12)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
x1, x2, y1, y2 = plt.axis()
plt.axis((x1-0.5, x2+0.5, y1, y2+0.05))
plt.savefig("../results/histograms/" + library_name)

我得到这个直方图histogram with first and last bars poorly located

有谁知道为什么第一个和最后一个酒吧看起来不同于他们的xtick?我尝试使用plt.margins函数没有结果。

非常感谢

2 个答案:

答案 0 :(得分:1)

要获得中心对齐的分箱而不是左对齐分箱,请使用plt.hist(data, bins=np.arange(50)-0.5)

示例代码:

import matplotlib.pyplot as plt
import numpy as np

values = [1, 1, 1, 2, 2, 1, 1, 1, 1, 5, 2, 1, 1, 2, 2,5,3,2,5, 1, 1, 4, 1, 1, 2, 1, 1,7,8,9,9,3,8,6, 2]

offset = 0.5

plt.hist(values,  bins=np.arange(1,np.max(values)+2)-offset, histtype='bar', color='green', alpha=0.5)
plt.title('library_name', fontsize=12)
plt.xlabel('xlabel')
plt.ylabel('ylabel')
x1, x2, y1, y2 = plt.axis()
plt.axis((x1-0.5, x2+0.5, y1, y2+0.05))
plt.show()

答案 1 :(得分:0)

顺便说一句,您可以使用[免责声明:我写了]“physt”库,它有一些分箱选项,包括一个适合整数的选项 - 请参阅https://github.com/janpipek/physt,和特别是对你的案件http://nbviewer.jupyter.org/github/janpipek/physt/blob/master/doc/Binning.ipynb#Integer-binning

代码如下:

import physt
h = physt.histogram(values, "integer")
ax = h.plot(color="green", alpha=0.5, ticks="center")

...然后添加你的轴/ plt格式......