4

如果我使用 matplotlib 的直方图,我可以选择 bin 的数量。但是如何在 numpy 的直方图中选择 bin 的数量?

import matplotlib.pyplot as plt
import numpy as np
array = [1,3,4,4,8,9,10,12]

range = int((max(array)) - min(array))+1
x, bins, patch = plt.hist(array, bins=range)

在这种情况下,范围 = 箱数 = (12-1)+1 = 12

所以结果是 x = [ 1. 0. 1. 2. 0. 0. 0. 1. 1. 1. 0. 1.]

但是numpy的结果是

hist, bin_edges = np.histogram(array, density=False)

numpy = [1 1 2 0 0 0 1 1 1 1] numpy_bin = [ 1. 2.1 3.2 4.3 5.4 6.5 7.6 8.7 9.8 10.9 12. ]

使用 numpy 时,如何选择箱数(= int((max(array)) - min(array))+1)

我想要像 matplotlib 一样的结果

4

1 回答 1

3

Matplotlib 正在使用 numpys 直方图,传递箱数只需将bins=bin_range关键字参数添加到np.histogram

hist, edges = np.histogram(array, bins=bin_range, density=False)

如果bin_range是整数,则您将获得bin_range相同大小的垃圾箱数量。bins in 的默认值np.histogrambins='auto'使用算法来决定 bin 的数量。阅读更多:https ://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.histogram.html

array = [1,3,4,4,8,9,10,12]
bin_range = int((max(array)) - min(array))+1
x, bins, patch = plt.hist(array, bins=bin_range)

x
array([ 1.,  0.,  1.,  2.,  0.,  0.,  0.,  1.,  1.,  1.,  0.,  1.])

hist, edges = np.histogram(array, bins=bin_range)

hist
array([1, 0, 1, 2, 0, 0, 0, 1, 1, 1, 0, 1], dtype=int64)

bins == edges
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True], dtype=bool)
于 2017-12-02T11:36:37.117 回答