2017-03-08 3 views
2

パンダシリーズはこれを引き起こしていますか?pandas matplotlibプロットに奇妙なアーティファクトがあります

plt.plot(df["Column"].as_matrix()) 

good plot


plt.plot(df["Column"]) 

bad plot


df["Column"].plot() 

実際に同様のアーティファクトを持っていますが、全く同じプロットではありません。

+0

が役立つかもしれないインデックスを再作成することです。私は、x軸の範囲が2つの方法の間で変化することに気付きます。私は 'pandas.Series'のインデックスが違う振る舞いを引き起こしていると思っています –

答えて

1

は、あなたが以下のデータフレーム

x = [2,1,3,6,5,6,7] 
y = [1,2,5,1,1,6,1] 
df = pd.DataFrame({"y" : y }, index=x) 

が続い
plt.plot(df["y"].as_matrix())を呼び出すと、それ自身のインデックスに対してのみy値(1ずつ増加、0から始まる)をプロットしplt.plot(y)と同等であるとしましょう。対照的に、
plt.plot(df["y"])は、plt.plot(x,y)と等価であり、データフレームのインデックスに対してy値をプロットしている。これらのインデックスがソートされていない場合、プロットは歪んで見えます。 (パンダプロットコマンドでも同じです。)

完全な例です。

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame({"y" : [1,2,5,1,1,6,1] }, index=[2,1,3,6,5,6,7]) 

plt.plot(df["y"].as_matrix(), lw=3, label='plt.plot(df["y"].as_matrix())') 
plt.plot(df["y"], lw=3, label='plt.plot(df["y"])') 
df["y"].plot(ax=plt.gca(), linestyle="--", color="k", label='df["y"].plot()') 

plt.legend() 
plt.show() 

enter image description here

上記の方法のいずれかを使用することができるようにする最も簡単な解決策は、あなたがサンプルデータが含まれている場合のデータフレーム

df = df.reset_index() 
+0

これは多かれ少なかれ起こったことです。データをサブサンプリングして別の列でソートしていましたが、これでインデックスが作成されました。私は、シリーズの "自然な"インデックスは配列インデックスのようになると思っていましたが、明らかにそうではありませんでした。好奇心のため、このような方法でインデックスを作成する理由は何ですか?ただ、[0、series.size]ではなく... ...? – Scott

+1

理由はもちろん、各エントリは定義されたインデックスを持つ必要があります(そうでない場合、インデックスの理由はありません)。これにより、例えば、ソートまたはフィルタリング後にデータを明確に識別できます。 'df = df.reset_index()'を使って、データフレームを新たに索引付けすることができます。 – ImportanceOfBeingErnest

+0

...リレーショナルデータベースと同様です。 – Scott

関連する問題