我用python编写了以下程序以获得等宽直方图。但是当我绘制它时,我得到的是图中的单线而不是直方图。有人可以帮我弄清楚我要去哪里了。
import numpy as np
import matplotlib.pyplot as plt
for num in range(0,5):
hist, bin_edges = np.histogram([1000, 98,99992,8474,95757,958574,97363,97463,1,4,5], bins = 5)
plt.bar(bin_edges[:-1], hist, width = 1000)
plt.xlim(min(bin_edges), max(bin_edges))
plt.show()
另外,我想用其“ num”值标记获得的每个图。范围从0到5。在上面给出的示例中,尽管我保持数据恒定,但是我打算将数据更改为不同的“ num”值。
看一下你的垃圾箱边缘:
>>> bin_edges
array([ 1.00000000e+00, 1.91715600e+05, 3.83430200e+05,
5.75144800e+05, 7.66859400e+05, 9.58574000e+05])
您的垃圾箱位置范围从1到大约一百万,但您只给条形图设置了1000的宽度。条形图(即使它们全部存在)太瘦了,无法看到。而且,大多数条形都具有血清高度,因为大多数箱是空的:
>>> hist
array([10, 0, 0, 0, 1])
您看到的“行”是最后一个bin,其中包含一个元素。该料仓的跨度大约为200000,但是钢筋的宽度仅为1000,因此相对于它应该覆盖的空间量来说,它非常薄。高度为10的酒吧也在那里,但它也很瘦,卡在地块的左边缘,因此基本上是不可见的。
尝试使用恒定宽度的条形图,同时将它们放置在与它们的大小相对应的x坐标上是没有意义的。通过将条形图放置在这些x坐标上,您已经将它们按照bin的宽度成比例地隔开了;使条变得更窄不会使它们靠得更近,只会使它们不可见。
如果要使用等宽长条,则应将它们放置在连续的X位置,并在轴上使用标签以显示垃圾箱所代表的值。这是一个有关您的数据的简单示例:
plt.bar(np.arange(len(bin_edges)-1), hist, width=1)
plt.xticks((np.arange(len(bin_edges))-0.5)[1:], bin_edges[:-1])
您必须决定如何格式化这些标签。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句