我有一个用于制作直方图的数据集(作为.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值,所以我不确定是什么导致了这个错误。
答案 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
会查找值为null
或nan
且~
符号否定的行;将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))
这为我解决了这个问题。