【问题标题】:Candlestick charts in matplotlib - Jupyter notebook is not plottingmatplotlib 中的烛台图 - Jupyter 笔记本未绘图
【发布时间】:2018-10-10 13:16:06
【问题描述】:

我一直在开发一个交易机器人,在这个过程中,我正在尝试使用 matplotlib 制作一个实时烛台图。问题是每次我运行 Jupyter notebook(或 Spyder 中的 iPython)时,我的绘图都没有显示或出现

 ([<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 电脑和 Anaconda 的 Jupyter

%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()

【问题讨论】:

  • 按原样运行您的代码,我得到this plot。所以我想很难知道你那边出了什么问题。
  • 当我一起运行所有东西时,我得到了同样的结果。当我只是运行烛台函数时,它会发生我之前所说的情况。您需要更多信息来帮助我吗?谢谢
  • 什么是“当我一起运行所有东西时,我得到了同样的东西。”什么意思?
  • 当我在 Spyder 中运行这个程序时,我得到了你在这里发送的图像(有三个区域,但没有数据)。当我在 Jupyter 中运行时,如果我只在一行中运行烛台函数,我会收到指向代码本地化的消息,或者什么也没有发生(正如我在问题中所示)
  • “行”是指“单元格”吗?在这种情况下,您仍然需要显示数字,fig

标签: python python-3.x matplotlib jupyter-notebook


【解决方案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))]

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2020-07-22
    • 2019-03-17
    • 2015-10-15
    • 2022-07-21
    • 1970-01-01
    • 2017-08-17
    • 2016-07-04
    • 2016-04-11
    相关资源
    最近更新 更多