2012-11-28 2 views
12

세 가지 다른 GPS 수신기에서 얻은 얼음 속도의 GPS 데이터가 있습니다. 데이터는 2009 년 초부터 줄리안 데이 (julian day)의 인덱스가있는 팬더 데이터 프레임에 있습니다.NaN을 포함하는 플롯 팬더 데이터 프레임

    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 

dataframe 양식 갖는다 :

데이터의 서브 세트 (기본 세트는 3,487,235 행 ...이다) R7과는 다른 비율로 샘플링

 
Index: 6071320 entries, 127.67291667 to 1338.51805556 
Data columns: 
R2 3487235 non-null values 
R7 3875864 non-null values 
R8 1092430 non-null values 
dtypes: float64(3) 

R2 따라서 R8은 그 간격에 체계적으로 나타나는 NaN입니다.

df.plot()은 전체 데이터 프레임 (또는 그 인덱스 된 행 위치)을 플롯하기 위해 R7과 R8을 플로팅하는 데는 잘 작동하지만 R2는 플롯하지 않습니다. 마찬가지로 df.R2.plot()도 작동하지 않습니다. R2를 플롯하는 유일한 방법은 df.R2.dropna().plot() 일 뿐이지 만 다른 수신기보다 더 거친 샘플링 주파수가 아닌 데이터가없는 기간을 나타내는 NaN도 제거됩니다.

누구도이 문제를 알고 있습니까? 문제에 대한 아이디어를 기꺼이 받아 보겠습니다.

+0

당신이'DatetiemIndex'과 재 샘플 R2 – bmu

답변

9

기본 플롯 스타일이 한 줄이기 때문에 아무 것도 보이지 않는 이유가 있습니다. 그러나 라인은 NaN에서 인터럽트되므로 여러 개의 연속 된 값만 표시됩니다. 그리고 후자는 귀하의 경우에 발생하지 않습니다. 보고 싶은 것에 따라 플로팅 스타일을 변경해야합니다.

우선, 추가 시도 :

.plot(marker='o') 

모든 데이터 포인트를 원으로 표시해야한다 그. 쉽게 흩어져서 마커 크기, edgecolor 등을 조정하는 것이 유용 할 수 있습니다. 임 완전히 팬더 그래서 나는 종종 플롯이 더 복잡 경우 자신을하기 matplotlib로 전환하기 matplotlib를 사용하는 방법을 조정하지 예 :

plt.plot(df.R2.index.to_pydatetime(), df.R2, 'o-') 
+1

감사 룻거보다 시간 단계를 변환해야합니다, 그 순간 좋은 해결 방법입니다. 팬더를 사용하는 큰 이유는 교차 상관과 같은 계산에 앞서 모든 샘플을 동일한 샘플링 간격으로 다시 인덱싱하는 것이므로 기본 플로팅을 위해 독립 실행 형 matplotlib을 계속 사용할 것입니다. 감사. – ajt