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.
とエラーが出てしまう. max
や min
を指定した覚えはないのにどうしたことだろうか.
解決
.tsv
からの読み込みのときに入る(可能性のある) Nan
が問題を引き起こしている.
np.genfromtxt
はなかなかいい感じにいい感じで,欠損してる値に対しては np.nan
を入れてくれる.
この np.nan
がちょっとした性質を持っていて,これが(plt.hist
が設定する)
max
や min
について問題を引き起こすわけだ.
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
あたりを使いつつ適宜
フィルタすればうまく行くっぽい.
ありがとうございました.