Matplotlib直方图(基本问题)

时间:2013-05-02 08:08:52

标签: python matplotlib

我正在尝试使用matplotlib绘制一个简单的直方图。我有例如(我将在实践中使用不同的距离函数)

import matplotlib.pyplot as plt
import numpy as np
import itertools


def hamdist(str1, str2):
    """Count the # of differences between equal length strings str1 and str2"""
    if (len(str1) != len(str2)):
        print str1, str2, "Length mismatch bozo!!!!!!"
    diffs = 0
    for ch1, ch2 in itertools.izip(str1, str2):
        if ch1 != ch2:
            diffs += 1
    return diffs

n = 10
bins=np.arange(0,n+2,1)
hamdists = []
for str1 in itertools.product('01', repeat = n):
    for str2 in itertools.product('01', repeat = n):
        hamdists.append(hamdist(str1, str2))
plt.hist(hamdists, bins=bins)
plt.show()

我得到一个看起来像这样的直方图。

histogram

如何执行以下操作?

  1. 更改x轴,使最后一个条形计算x = 10的数字。如果我只是更改为bins=np.arange(0,11,1),则会切断x = 10的值。
  2. 标记x轴中的每个点
  3. 将x轴标签移动到条形图的中间位置,而不是现在的位置。

1 个答案:

答案 0 :(得分:16)

你可以通过设置直方图函数的align关键字来解决你的第一和第三点(默认为'mid',bin的中心)。第二个是手动设置xticks。

请参阅:

fig, ax = plt.subplots(1,1)

ax.hist(hamdists, bins=bins, align='left')
ax.set_xticks(bins[:-1])

enter image description here