1. ホーム
  2. python

[解決済み】ヒストグラムプロット "AttributeError: max must be larger than min in range parameter."

2022-02-16 14:53:10

質問

ヒストグラムを作成するためのデータセット(.txtファイル)がありますが、ジャーナルから、データを正規化し、代わりに正規化したデータのヒストグラムをプロットするように依頼されました。しかし、正規化されたデータをプロットしようとすると、"AttributeError: max must be larger than min in range parameter." というエラーが発生します。基本的に、H1は私のデータのリストです(いくつかは、私が削除しようとしているナノ値を含むかもしれません)、そして、私は残りのデータを正規化しようとしています。

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 関数を使用して、NULL 値を含む行を削除します。後者は、インポートした配列にブーリアン配列 ~np.isnan(H1) . ここで np.isnan である行を検索します。 null または nan~ の記号はそれを否定しています。 True の値を False その逆も同様です。それが終わると、新しい配列の各値に関数を適用する作業に移ります。ここでいう関数は lambda x: x/np.max(newH1) これは基本的に、配列の各値を新しい配列に存在する最大値で割るものです。

次のステップは、ヒストグラムをプロットすることです。必要なビンの数を 400 に設定し、ヒストグラムを描画するために plt.hist を使用してヒストグラムをプロットします。また figure を追加し、さらに subplot に、私たちの figure . 続いて subplot を使用してヒストグラムを描画します。

お役に立てれば幸いです。