Графики свечей в matplotlib - блокнот Jupyter не строит

Я занимаюсь разработкой торгового бота и в процессе пытаюсь создать график свечей в реальном времени с помощью matplotlib. Проблема в том, что каждый раз, когда я запускаю блокнот Jupyter (или iPython в Spyder), мой график не отображается или появляется это

 ([<matplotlib.lines.Line2D at 0x113bee978>,
  <matplotlib.lines.Line2D at 0x1131204a8>,
  <matplotlib.lines.Line2D at 0x113095f28>,
  <matplotlib.lines.Line2D at 0x1131c3fd0>,
  <matplotlib.lines.Line2D at 0x1132ef160>,
  <matplotlib.lines.Line2D at 0x1132efa20>],
 [<matplotlib.patches.Rectangle at 0x11312f978>,
  <matplotlib.patches.Rectangle at 0x113120278>,
  <matplotlib.patches.Rectangle at 0x113061358>,
  <matplotlib.patches.Rectangle at 0x1131eafd0>,
  <matplotlib.patches.Rectangle at 0x1132ef390>,
  <matplotlib.patches.Rectangle at 0x1132effd0>])

Я пробовал использовать% matplotlib inline и plt.show (), но ничего не работает. Здесь следует код, который я использую.

*** Кстати, я использую компьютер Mac и Jupyter от Anaconda.

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as mticker
from matplotlib.dates import date2num
from matplotlib.finance import candlestick_ohlc
import numpy as np
import requests
import time
import pandas as pd
import datetime as dt

def getNow(pair):
    return requests.get('https://poloniex.com/public?command=returnTicker').json()[pair]

def getPast(pair, period, daysBack, daysData):
    now = int(time.time())
    end = now-(24*60*60*daysBack)
    start = end-(24*60*60*daysData)
    base = 'https://poloniex.com/public?command=returnChartData&currencyPair='
    response = requests.get('{0}{1}&start = {2}&end = {3}&period = {4}'.format(base, pair, start, end, period))
    return response.json()

pair = "USDT_BTC"    # Use ETH pricing data on the BTC market
period = 7200       # Use 7200 second candles
daysBack = 0       # Grab data starting 0 days ago
daysData = 15       # From there collect 15 days of data

# Request data from Poloniex
data = getPast(pair, period, daysBack, daysData)

# Convert to Pandas dataframe with datetime format
data = pd.DataFrame(data)

#Convert dates do float for matplotlib
data.date = data.date.astype(float)

#Define ohlc
date, closes, highs, lows, opens, volume = data['date'], data['close'], data['high'],data['low'], data['open'], data['volume']
ohlc = [date, opens, highs, lows, closes, volume]


#Plot with three regions
fig = plt.figure(facecolor='#f0f0f0')
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=1, colspan=1)
plt.title(pair)
plt.ylabel('H-L')
ax2 = plt.subplot2grid((6,1), (1,0), rowspan=4, colspan=1, sharex=ax1)
ax2v = ax2.twinx()
plt.ylabel('Price')
ax3 = plt.subplot2grid((6,1), (5,0), rowspan=1, colspan=1, sharex=ax1)
plt.ylabel('MAvgs')

#Candlestick plot
candlestick_ohlc(ax1, ohlc, colorup='#77d879', colordown='#db3f3f')
plt.show()

Запустив ваш код как есть, я получаю этот сюжет. Так что я думаю, трудно понять, что с тобой не так.

ImportanceOfBeingErnest 30.04.2018 14:34

Я получаю то же самое, когда объединяю все вместе. Когда я просто запускаю функцию подсвечника, происходит то, что я сказал ранее. Вам нужна дополнительная информация, чтобы помочь мне? Спасибо

Flavio de Falcao e Helena 30.04.2018 14:51

Что означает «Я получаю то же самое, когда все вместе соединяю». иметь в виду?

ImportanceOfBeingErnest 30.04.2018 14:52

Когда я запускаю эту программу в Spyder, я получаю изображение, которое вы отправили сюда (с тремя областями, но без данных). Когда я запускаю Jupyter, если я запускаю только функцию свечи в одной строке, я получаю это сообщение, указывающее на локализацию кода, или ничего не происходит (как я показал в вопросе)

Flavio de Falcao e Helena 30.04.2018 14:55

под "чертой" вы подразумеваете "ячейку"? В этом случае вам все равно нужно показать цифру fig.

ImportanceOfBeingErnest 30.04.2018 14:58

Да, клетка. Моя самая большая проблема сейчас в том, что цифра отображается, а данные - нет. Я хотел бы знать, неправильно ли я что-то говорю, может быть

Flavio de Falcao e Helena 30.04.2018 15:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
1 000
1

Ответы 1

Похоже, что данные, вставленные в функцию, были в неправильном формате. В данном случае это правильный способ определения ohlc:

date, closes, highs, lows, opens, volume = data['date'].tolist(), data['close'].tolist(), data['high'].tolist(),data['low'].tolist(), data['open'].tolist(), data['volume'].tolist()
ohlc = [tuple([date[i],opens[i],highs[i],lows[i], closes[i]
       ]) for i in range(len(date))]

Другие вопросы по теме