2012-05-10 27 views
5

Tôi không quản lý để âm mưu matplotlib.finance.candlestick mà không có những ngày cuối tuần (khoảng trống giữa mỗi 5 chân nến). example from Matplotlib's website không loại trừ các ngày cuối tuần và the way to exclude weekends on other plots dường như không áp dụng cho CandleSticks.Làm thế nào để tôi chỉ vẽ các ngày trong tuần bằng cách sử dụng nến matplotlib của Python?

Có ai đi qua điều này trước đây không?

ps. theo yêu cầu, đây là ví dụ:

#!/usr/bin/env python 
from pylab import * 
from matplotlib.dates import DateFormatter, WeekdayLocator, HourLocator, \ 
DayLocator, MONDAY 
from matplotlib.finance import quotes_historical_yahoo, candlestick,\ 
plot_day_summary, candlestick2 

# (Year, month, day) tuples suffice as args for quotes_historical_yahoo 
date1 = (2004, 2, 1) 
date2 = (2004, 4, 12) 


mondays = WeekdayLocator(MONDAY)  # major ticks on the mondays 
alldays = DayLocator()    # minor ticks on the days 
weekFormatter = DateFormatter('%b %d') # Eg, Jan 12 
dayFormatter = DateFormatter('%d')  # Eg, 12 

quotes = quotes_historical_yahoo('INTC', date1, date2) 

fig = figure() 
fig.subplots_adjust(bottom=0.2) 
ax = fig.add_subplot(111) 
ax.xaxis.set_major_locator(mondays) 
ax.xaxis.set_minor_locator(alldays) 
ax.xaxis.set_major_formatter(weekFormatter) 

#plot_day_summary(ax, quotes, ticksize=3) 
candlestick(ax, quotes, width=0.6) 

ax.xaxis_date() 
ax.autoscale_view() 
setp(gca().get_xticklabels(), rotation=45, horizontalalignment='right') 

show() 
+0

Bạn có thể đăng một ví dụ tối thiểu không? –

+0

@Zhenya, đây là ví dụ: http://matplotlib.sourceforge.net/examples/pylab_examples/finance_demo.html?highlight=candlestick – Fred

+0

Bản sao có thể có của [Biểu đồ hình nến trong ngày sử dụng MatPlotLib] (http://stackoverflow.com/questions/9673988/intraday-candlestick-charts-using-matplotlib) – lanery

Trả lời

3

Sau dòng 'dấu ngoặc kép' của bạn:

weekday_quotes = [tuple([i]+list(quote[1:])) for i,quote in enumerate(quotes)] 

sau đó

candlestick(ax, weekday_quotes, width=0.6) 

này sẽ vẽ đồ thị dữ liệu mà không có sự khoảng cách giữa các ngày trong tuần, bây giờ bạn phải thay đổi xticks trở lại ngày, tốt nhất là thứ hai. Giả sử báo giá đầu tiên của bạn là thứ hai:

import matplotlib.dates as mdates 

ax.set_xticks(range(0,len(weekday_quotes),5)) 
ax.set_xticklabels([mdates.num2date(quotes[index][0]).strftime('%b-%d') for index in ax.get_xticks()]) 

Điều này khá thô nhưng dường như hoàn thành công việc - chúc bạn may mắn!

Các vấn đề liên quan