2013-12-18 21 views
46

pandasシリーズオブジェクトからヒストグラムを作成する際に問題があり、なぜ動作しないのか理解できません。コードは以前はうまくいきましたが、現在はうまくいきません。ここでヒストグラムを使用したMatplotlib/Pandasエラー

は、私のコードのビットは、(私はのヒストグラムを作成しようとしている具体的には、パンダ系列オブジェクト)である:

結果を出力
type(dfj2_MARKET1['VSPD2_perc']) 

pandas.core.series.Series

ここに私のプロットですコード:

fig, axes = plt.subplots(1, 7, figsize=(30,4)) 
axes[0].hist(dfj2_MARKET1['VSPD1_perc'],alpha=0.9, color='blue') 
axes[0].grid(True) 
axes[0].set_title(MARKET1 + ' 5-40 km/h') 

エラーメッセージ:

AttributeError       Traceback (most recent call last) 
    <ipython-input-75-3810c361db30> in <module>() 
     1 fig, axes = plt.subplots(1, 7, figsize=(30,4)) 
     2 
    ----> 3 axes[1].hist(dfj2_MARKET1['VSPD2_perc'],alpha=0.9, color='blue') 
     4 axes[1].grid(True) 
     5 axes[1].set_xlabel('Time spent [%]') 

    C:\Python27\lib\site-packages\matplotlib\axes.pyc in hist(self, x, bins, range, normed,   weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs) 
    8322    # this will automatically overwrite bins, 
    8323    # so that each histogram uses the same bins 
-> 8324    m, bins = np.histogram(x[i], bins, weights=w[i], **hist_kwargs) 
    8325    m = m.astype(float) # causes problems later if it's an int 
    8326    if mlast is None: 

    C:\Python27\lib\site-packages\numpy\lib\function_base.pyc in histogram(a, bins, range,  normed, weights, density) 
    158   if (mn > mx): 
    159    raise AttributeError(
--> 160     'max must be larger than min in range parameter.') 
    161 
    162  if not iterable(bins): 

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

うーん、それは私のために動作します。データフレームを表示できますか? –

+0

奇妙なことに、実際にヒストグラムを生成することができます。s = dfj2_MARKET1 ['VSPD1_perc'] s.hist() – jonas

+0

はい、しかし、matplotlibではなく、パンダの 'hist'関数を使用しています。そして、これは期待どおりにNaNを扱います。私の更新を参照してください。 – joris

答えて

78

このエラーは、シリーズにNaN値がある場合に特に発生します。それは事実でしょうか?

これらのNaNはmatplotlibのhist関数ではうまく処理されません。たとえば:

s = pd.Series([1,2,3,2,2,3,5,2,3,2,np.nan]) 
fig, ax = plt.subplots() 
ax.hist(s, alpha=0.9, color='blue') 

は同じエラーAttributeError: max must be larger than min in range parameter.一つのオプションは、プロットする前にはNaNのを削除することなどで生成されます。これは動作します:

ax.hist(s.dropna(), alpha=0.9, color='blue') 

別のオプションは、パンダあなたのシリーズにhistメソッドを使用することで、axキーワードにaxes[0]を提供する:

dfj2_MARKET1['VSPD1_perc'].hist(ax=axes[0], alpha=0.9, color='blue') 
+0

完璧に動作します! – jonas

+0

パーフェクトNaNはエラーを生成し、pandas/pyplot例外は十分な情報を共有しません。本当に役に立ちました。 – Doogle

+0

完璧に動作します! –

関連する問題