2013-03-07 2 views
6

날짜 및 시간 인 인덱스를 x 축으로 사용하여 팬더 데이터 프레임에 데이터를 플롯하려고합니다. 나머지 데이터는 데이터 프레임에 실제 데이터로 저장됩니다.matplotlib에서 x 축으로 사용할 팬더 데이터 프레임에서 날짜 인덱스를 가져 오는 방법

from matplotlib.finance import candlestick2 

bars[['open','high','low','close']].head() 


tickdatetime   open  high  low   close   

2012-09-20 09:00:00 1447.50  1447.50  1447.00  1447.00 

2012-09-20 09:01:00 1447.00  1447.25  1447.00  1447.25 

2012-09-20 09:02:00 1447.25  1447.75  1447.25  1447.50 

2012-09-20 09:03:00 1447.75  1447.75  1447.25  1447.50 

2012-09-20 09:04:00 1447.25  1447.50  1447.25  1447.50 

fig,ax = plt.subplots() 
ax.plot_date(bars.ix.to_pydatetime(), s, 'v-') 
fig,ax = plt.subplots() 
ax.plot_date(bars.ix.to_pydatetime(), s, 'v-') 
ax = fig.add_axes([0.1, 0.2, 0.85, 0.7]) 
ax.autoscale_view() 
linecol, rectcol = candlestick2(ax,bars['open'],bars['close'],bars['high'],bars['low'],width=.5,colorup='g',colordown''r',alpha=1) 
z = rectcol.get_zorder() 
linecol.set_zorder(0.9*z) 

하지만 난이 오류 : 여기에 지금 노력하고 무엇

AttributeError       Traceback (most recent call last) 
<ipython-input-57-d62385067ceb> in <module>() 
1 fig,ax = plt.subplots() 
----> 2 ax.plot_date(bars.ix.to_pydatetime(), s, 'v-') 
3 
4 #ax = fig.add_axes([0.1, 0.2, 0.85, 0.7]) 
5 ax.autoscale_view() 

AttributeError: '_NDFrameIndexer' object has no attribute 'to_pydatetime' 

나는 (그 bars.plot 이해가)이 작업을 자동으로 처리 할 수있는 좋은 인터페이스입니다하지만 난 원하는

내 문제의 루트는 데이터 프레임에서 인덱스 값을 가져 와서 인덱스 값을 datetimes로 변환하려고하는 것 같지만 아직 그 일을 할 수 없었다.

모든 아이디어를 높이 평가합니다!

+1

bars.ix 대신 bars.index를 사용해야합니다. –

답변

5

Chang이 지적한대로 bars.indexbars.ix이 아니라 원하는 것입니다. bars.index은 기본적으로 인덱스가있는 시리즈 인 Index 객체를 반환합니다. 이것이 당신이 원하는 것입니다. bars.ix는 _NDFrameIndexer를 반환하는데, 문서화 된 것으로 보이지만 전체 DataFrame을 볼 수 있습니다 (예 : bars.ix[2] 시도).

bar.ix를 bars.index로 바꾸면 오류가 제거됩니다 (일치하지 않는 오타를 제거한 경우). 그러면 처음 두 개의 하위 그림에 날짜가 표시됩니다. 그러나 그것은 막대 촛점 음모에 날짜 진드기를 만들지는 않을 것입니다. bar.index를 사용하면 코드가 그리 어렵지는 않지만 확실히 할 수 있습니다.

그러나 candlestick2 플롯에 날짜 틱을 넣고 싶다면 조금 더 어려워 질 것입니다. 여기서 문제는 candlestick2가 입력 한 내용으로 볼 수 있듯이 x 축 값을 전혀 사용하지 않는다는 것입니다. 0,1,2 ...에 촛대를 그립니다. 틱이나 한계에 상관없이 날짜로 x 축을 설정하려고하면 플롯이 x 축에서 완전히 다른 어딘가에 있기 때문에 모든 것이 엉망이 될 것입니다. 대신 candlestick2의 촛대를 사용하여 포함하지 않는이 문제를 해결하기

쉬운 방법 중 하나는, 당신의 틱 날짜에 따라 라벨 설정하여 X 축이 데이터처럼 정수 인덱스를 유지하자 대신하는 것입니다. 따라서, 예를 들어 : 이것은 당신의 일을 나타내는

fig = figure() 
ax = fig.add_subplot(111) 
candlestick2(ax,bars['open'],bars['close'],bars['high'],bars['low'],width=.5,colorup='g',colordown='r',alpha=1) 
ax.set_xticks(arange(0,len(bars))) 
ax.set_xticklabels(bars.index,rotation=70) 

, (a)받은 진드기 정수 위치에 있는지 확인합니다 다음 날짜를 기반으로하는 진드기의 레이블을 설정합니다. 또한 실제로 볼 수 있도록 회전 시켰습니다. ax.set_xticklabels는 문자열을 취하므로 원하는 날짜 형식을 수정할 수 있습니다.

+0

Chang She, 고마워요, bars.index는 내가 필요한 것입니다. CGE, 맞아, 내 촛대 음모에 진드기를 만들려고하고있어. 그걸 알아 내려고 노력했지만, axes 인스턴스를 bars.index로 가리키는 방법을 알아낼 수 없습니다. 주 및 주를 사용하여 많은 메이저/마이너 로케이터 항목을 찾았으나, 코드를 기본 서식을 사용하여 일일/주간/미세하게 데이터없이 다시 사용할 수 있도록 코드를 작성해야한다고 생각합니다. 로케이터 코드를 망친다. bars.index를 사용하여 촛대 줄거리에 나타나는 날짜를 얻는 방법에 대한 아이디어가 있습니까? 감사. – Jeff

+0

이것은 지금까지 시도했지만 내 x 축은 비어 있습니다. 'fig = figure() 도끼 = fig.add_subplot (111) 도끼.xaxis_date() ax.set_xticks (bars.index.to_pydatetime()) 촛대 2 (도끼, 막대 [ '열기'], 막대 [ '닫기'], 막대 [ '높음'], 막대 [ '낮음'], 너비 = 0.5, colorup = 'g', colordown = 'r', alpha = 1)' – Jeff

+0

내가 추가 한 것을 시험해보고 효과가 있는지 확인하십시오. candlestick2가 막대에있는 날짜가 아닌 정수 x 값을 사용하기 때문에 x 축이 비어 있습니다. – cge

관련 문제