直方图绘制“AttributeError:max必须大于范围参数中的min”。

时间:2017-02-03 00:13:25

标签: python histogram

我有一个用于制作直方图的数据集(作为.txt文件),但是期刊要求我对数据进行标准化并绘制标准化数据的直方图。但是,我得到一个“AttributeError:max必须大于范围参数中的min。”我正在尝试绘制规范化数据时出错。基本上,H1是我的数据列表(有些可能包括我试图删除的nan值),我正在尝试规范化剩余数据

import numpy as np
from numpy import array
import matplotlib.pyplot as plt

H1 = np.loadtxt('histogramrate25p10area30.txt') #Import data from txt file

newH1 = [x for x in H1 if x != 'nan'] #Remove nan values
norm1 = [float(i)/max(newH1) for i in newH1] #Normalize remaining values

nbins1 = 400

plt.figure()

plt.subplot(111)
plt.hist(norm1, nbins1, color='purple', alpha=0.5)
plt.ylabel('Frequency', fontsize=20)

plt.show()

从浏览这个网站来看,错误是由于存在nan值,但我想在上面的newH1列表中,我已经删除了所有的nan值,所以我不确定是什么导致了这个错误。

2 个答案:

答案 0 :(得分:3)

以下内容应该:

import numpy as np
from numpy import array
import matplotlib.pyplot as plt


H1 = np.loadtxt('histogramrate25p10area30.txt')

newH1 = H1[~np.isnan(H1)]
norm1 = np.apply_along_axis(func1d=lambda x: x/np.max(newH1), arr=newH1, axis=0)
nbins1 = 400
plt.hist(norm1, nbins1, color='purple', alpha=0.5)

plt.figure()

plt.subplot(111)
plt.hist(norm1, nbins1, color='purple', alpha=0.5)
plt.ylabel('Frequency', fontsize=20)

plt.show()

说明:

上面的脚本在np.loadtxt函数的帮助下加载数据,然后删除包含空值的行。后者是通过使用布尔数组~np.isnan(H1)索引导入的数组来完成的。在此处,np.isnan会查找值为nullnan~符号否定的行;将True值更改为False,反之亦然。完成后,它继续将函数应用于新数组的每个值。这里的函数是lambda x: x/np.max(newH1);它基本上将数组的每个值除以新数组中的最大值。

下一步是绘制直方图。我们将所需的箱数设置为400,并使用plt.hist绘制直方图。创建figure然后向subplot添加figure还有额外的好处。随后,我们使用subplot绘制直方图。

我希望这证明有用。

答案 1 :(得分:0)

我面临着类似的问题。 他们期望参数范围。

plt.hist( DATAFRAME NAME, RANGE( min value, max value))

这为我解决了这个问题。