Xeebi

home categories feeds

matplotlib で AttributeError: max must be larger than min in range parameter

問題

matplotlib.pyplot をつかってヒストグラムを書いてみよう.

#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt
filename = "myfile.tsv"
data = np.genfromtxt(filename, delimiter='\t')
plt.hist(data[:,5])
plt.show()

すると

AttributeError: max must be larger than min in range parameter.

とエラーが出てしまう. maxmin を指定した覚えはないのにどうしたことだろうか.

解決

.tsv からの読み込みのときに入る(可能性のある) Nan が問題を引き起こしている.

np.genfromtxt はなかなかいい感じにいい感じで,欠損してる値に対しては np.nan を入れてくれる. この np.nan がちょっとした性質を持っていて,これが(plt.hist が設定する) maxmin について問題を引き起こすわけだ.

a = np.nan
>>> a > 100
False
>>> a < 100
False
>>> a > -100000
False
>>> a > -np.inf
False
>>> a < np.inf
False
>>> a < a
False
>>> a == a
False
>>> a <= a
False
>>> a is a
True

で,np.isnan あたりを使いつつ適宜 フィルタすればうまく行くっぽい.

ありがとうございました.