我有一个用于制作直方图的数据集(作为 .txt 文件),但期刊要求我对数据进行归一化并绘制归一化数据的直方图。但是,我收到“AttributeError:范围参数中的最大值必须大于最小值”。当我试图绘制规范化数据时出错。基本上,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 值,所以我不确定是什么导致了这个错误。
最佳答案
应该做到以下几点:
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
函数的帮助下加载数据,然后删除包含空值的行。后者是通过使用 bool 数组 ~np.isnan(H1)
索引导入的数组来完成的。此处,np.isnan
查找值为 null
或 nan
的行,而 ~
符号否定该行;将 True
值更改为 False
,反之亦然。一旦完成,它将继续对新数组的每个值应用一个函数。这里的函数是lambda x: x/np.max(newH1)
;这基本上是将数组的每个值除以新数组中存在的最大值。
下一步是绘制直方图。我们将所需的 bin 数设置为 400,并使用 plt.hist
绘制直方图。创建一个 figure
然后向我们的 figure
添加一个 subplot
还有一个额外的好处。随后,我们使用 subplot
绘制直方图。
我希望这证明是有用的。
关于python - 直方图绘制 "AttributeError: max must be larger than min in range parameter.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42014687/