25

3 つの異なる GPS 受信機からの氷速の GPS データがあります。データは、ユリウス日 (2009 年の開始からの増分) のインデックスを持つ pandas データフレームにあります。

これはデータのサブセットです (主なデータセットは 3487235 行です...):

                    R2          R7         R8
1235.000000 116.321959  100.805197  96.519977
1235.000116 NaN         100.771133  96.234957
1235.000231 NaN         100.584559  97.249262
1235.000347 118.823610  100.169055  96.777833
1235.000463 NaN         99.753551   96.598350
1235.000579 NaN         99.338048   95.283989
1235.000694 113.995003  98.922544   95.154067

データフレームの形式は次のとおりです。

インデックス: 6071320 エントリ、127.67291667 ~ 1338.51805556
データ列:
R2 3487235 非ヌル値
R7 3875864 非ヌル値
R8 1092430 非ヌル値
dtypes: float64(3)

R2 は R7 および R8 とは異なるレートでサンプリングされたため、NaN はその間隔で体系的に表示されます。

データフレーム全体 (またはそのインデックス付きの行の位置) をプロットしようとdf.plot()すると、R7 と R8 のプロットに関してはうまくいきますが、R2 はプロットされません。同様に、やるだけでdf.R2.plot()はうまくいきません。R2 をプロットする唯一の方法は do を実行することですdf.R2.dropna().plot()が、これにより (他の受信機よりも粗いサンプリング周波数ではなく) データのない期間を表す NaN も削除されます。

他の誰かがこれに出くわしましたか? この問題に関するアイデアは、ありがたく受け取られます:)

4

4 に答える 4

23

何も表示されない理由は、デフォルトのプロット スタイルが線のみであるためです。ただし、ラインは NaN で中断されるため、連続する複数の値のみがプロットされます。そして後者はあなたの場合には起こりません。見たいものに応じて、プロットのスタイルを変更する必要があります。

まず、以下を追加してみてください。

.plot(marker='o')

これにより、すべてのデータ ポイントが円として表示されます。乱雑になりやすいので、マーカーサイズ、エッジカラーなどを調整すると便利です。私は Pandas が matplotlib をどのように使用しているかに完全に適応していないので、プロットがより複雑になった場合、自分で matplotlib に切り替えることがよくあります。

plt.plot(df.R2.index.to_pydatetime(), df.R2, 'o-')
于 2012-11-28T13:30:27.797 に答える
12

データがあるポイント間に直線を描きたい場合、Pandas に補間によってギャップを埋めさせてからプロットすることができます。

.interpolate(method='linear').plot()
于 2020-02-10T11:32:06.337 に答える