2013-06-22 4 views
0

Я пытаюсь построить некоторые финансовые данные с помощью библиотеки Matplotlib.finance, а часть candlestick2 работает нормально. Однако функция `volume_overlay не показывает ничего на графике, хотя вторая ось масштабируется правильно.Добавление объемного наложения в matplotlib

Существует аналогичный вопрос here, но он не решает проблему, просто предоставляет способ создания собственного оверлея тома.

# Get data from CSV 
data = pandas.read_csv('dummy_data.csv', 
          header=None, 
          names=['Time', 'Price', 'Volume']).set_index('Time') 

# Resample data into 30 min bins 
ticks = data.ix[:, ['Price', 'Volume']] 
bars = ticks.Price.resample('30min', how='ohlc') 
volumes = ticks.Volume.resample('30min', how='sum') 

# Create figure 
fig = plt.figure() 
ax1 = fig.add_subplot(111) 
# Plot the candlestick 
candles = candlestick2(ax1, bars['open'], bars['close'], 
         bars['high'], bars['low'], 
         width=1, colorup='g') 

# Add a seconds axis for the volume overlay 
ax2 = ax1.twinx() 

# Plot the volume overlay 
volume_overlay(ax2, bars['open'], bars['close'], volumes, colorup='g', alpha=0.5) 

plt.show() 

Может ли кто-нибудь показать мне, что мне не хватает? Или функция volume_overlay сломана?

EDIT

Данные загружаются из http://api.bitcoincharts.com/v1/trades.csv?symbol=mtgoxUSD - вставить в Notepad ++, а затем искать и заменить "" с "\ п".

+0

В качестве предупреждения, что модуль собирается получить большие ИПНЫ изменения в ближайшем будущий https://github.com/matplotlib/matplotlib/pull/1920 Если вы действительно используете этот модуль, прокомментируйте:) – tacaswell

+0

и можете ли вы опубликовать csv, который используете? – tacaswell

ответ

1

Существует очень глупая ошибка (или, возможно, странный выбор дизайна) в том, что volume_overlay возвращает polyCollection, но не добавляет его к осям. Следующий должен работать:

from matplotlib.finance import * 

data = parse_yahoo_historical(fetch_historical_yahoo('CKSW', (2013,1,1), (2013, 6, 1))) 

ds, opens, closes, highs, lows, volumes = zip(*data) 

# Create figure 
fig = plt.figure() 
ax1 = fig.add_subplot(111) 
# Plot the candlestick 
candles = candlestick2(ax1, opens, closes, highs, lows, 
         width=1, colorup='g') 

# Add a seconds axis for the volume overlay 
ax2 = ax1.twinx() 

# Plot the volume overlay 
bc = volume_overlay(ax2, opens, closes, volumes, colorup='g', alpha=0.5, width=1) 
ax2.add_collection(bc) 
plt.show() 

https://github.com/matplotlib/matplotlib/pull/2149 [Это было исправлено и будет в 1.3.0, когда он поставляется]