2015-01-22 3 views
0

창고에 대한 시작 및 끝 수량의 중첩 된 사전이 있습니다. 이 데이터를 matplotlib과 함께 stackplot으로 그래프로 나타내고 싶습니다. x 값이 목록이고 y 값이 목록의 목록이되도록 데이터를 변환해야합니다. 키가 cuttoff 날짜보다 작거나 같은 키로 플롯을 제한하고 싶습니다. 'cutoff'. 줄거리를 수행하는 모든 코드를 작성했지만 사전에서 데이터를 x 및 y 값으로 변환하는 데 문제가 있습니다. 아래의 예에서는 수동으로 값을 입력했습니다. 실제 스크립트에서는 훨씬 더 큰 데이터 세트가 있고 실제로 변환을 코딩하는 방법이 필요합니다. 당신은 DICT를 작성하고 데이터 사용을 주문한 경우중첩 된 사전을 다양한 목록으로 변환

y = [[d[k]['start qty'],d[k]['end qty']] for k in x] 

: y는 키를 사용하십시오

x = [x for x in d if x <= cutoff] 

:

from datetime import datetime 
import matplotlib 
import matplotlib.pyplot as plt 

d = { 
    datetime(2015, 1, 19) : {'start qty': 13 , 'end qty': 12}, 
    datetime(2015, 1, 20) : {'start qty': 10 , 'end qty': 34}, 
    datetime(2015, 1, 21) : {'start qty': 30 , 'end qty': 35}, 
    datetime(2015, 1, 22) : {'start qty': 20 , 'end qty': 40}, 
} 

cutoff = datetime(2015, 1, 21) 

y = [[13,10,30],[12,34,35]] 
x = [datetime(2015, 1, 19), datetime(2015, 1, 20), datetime(2015, 1, 21)] 


plt.stackplot(x,y) 
plt.show() 
+0

@dsm. 고정 된 OP – user2242044

답변

1

하면 날짜가 당신의 컷오프 날짜에 대해 확인 얻으려면 orderedDict 또는 sortx. 당신의 편집에 대한

: 내가 한

x = [dte for dte in d if dte <= cutoff] 
y = [[],[]] 
for k in x: 
    y[0].append(d[k]["start qty"]) 
    y[1].append(d[k]["end qty"]) 
+0

x를 정렬하는 것은 나에게 의미가 있지만, 임의의 순서로 y를 남겨 둡니다. 어떻게 이들을 함께 정렬 할 수 있습니까? – user2242044

+0

아니요 x를 정렬 한 다음 y가 일치하면 x의 y 정렬 된 키를 사용하여 y 데이터를 얻습니다. –

+0

내 실수. y를 정의한 후에 정렬했습니다. 나는 그것을 먼저해야만했다. 나는 OrderedDict가 더 나은 선택일지도 모른다고 생각합니다. – user2242044

관련 문제