直方图只有一个条形。

10

我的数据——从pandas dataframe中提取出的196,585条numpy数组记录,正在被matplotlib.hist放入单个箱子中。这些数据最初是整数,因此我试图将它们转换为浮点数,如下所示,但它们仍未在10个bin之间分配。

有趣的是,整数数据的一个小子样本(使用df.sample(0.00x))成功地分布。

如果你对数据准备或使用matplotlib的直方图函数有任何建议,我将不胜感激。

histogram output

x = df[(df['UNIT']=='X')].OPP_VALUE.values
num_bins = 10
n, bins, patches = plt.hist((x[(x>0)]).astype(float), num_bins, normed=False, facecolor='0.5', alpha=0.8)
plt.show()

2
尝试使用 log=True - 您的样本包含很少的大值,这会扭曲分布。您可能需要考虑将它们删除。 - cel
1
是的。看起来你需要将其放大到最大。你能打印出 print(n); print(bins); 的输出吗? - Mad Physicist
你说得太对了,以至于log=True甚至都不起作用:print(bins)[1.00000000e+00 3.00000000e+09 6.00000000e+09 9.00000000e+09 1.20000000e+10 1.50000000e+10 1.80000000e+10 2.10000000e+10 2.40000000e+10 2.70000000e+10 3.00000000e+10]print(n) [1.86114000e+05 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00] - A. Slowey
2个回答

5
很可能发生的情况是,x > 0.5 的数据点数量非常少,但是您确实有一些离群值会强制 hist 函数选择它所选择的比例尺。请尝试删除所有值 > 0.5(或者如果您不想转换为浮点数,则为1),然后重新绘图。

我也遇到了这个问题,你能详细解释一下吗?我使用Z分数去除异常值后进行绘图,但是出现了这个问题。 - Scope

-1

你应该修改箱子的数量,例如

number_of_bins = 200
bin_cutoffs = np.linspace(np.percentile(x,0), np.percentile(x,99),number_of_bins)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接