Matplotlib烛台(日内)图表是一个大Blob

时间:2016-04-25 16:24:54

标签: python pandas matplotlib

我正在尝试使用Matplotlib绘制烛台图表,以及我为REST API调用获取的数据。但是,由于呼叫使用唯一的访问令牌,我已下载了样本数据并将其加载到csv中以用于此问题。 Here is a pastebin link示例数据的样子。要在Python中处理数据,我使用Pandas来创建数据帧。这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
from matplotlib.finance import candlestick_ohlc
from datetime import date

""" Pandas """
historic_df = pd.read_csv("sample_data.csv")

dates = pd.to_datetime(historic_df['time'], format="%Y-%m-%dT%H:%M:%S.%fZ")
openp = historic_df['openAsk']
highp =  historic_df['highAsk']
lowp =  historic_df['lowAsk']
closep =  historic_df['closeAsk']

""" Matplotlib """
ax1 = plt.subplot2grid((1,1), (0,0))
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))

x = 0
ohlc = []

while x < len(dates):
    d = mdates.date2num(dates[x])
    append_me = d, openp.values[x], highp.values[x], lowp.values[x], closep.values[x]
    ohlc.append(append_me)
    x += 1

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

以下是我的输出结果:

enter image description here

您可以对烛台的垂直线进行分类,但条纹看起来非常宽。关于如何解决这个问题的任何想法?谢谢。

2 个答案:

答案 0 :(得分:5)

只需更改图表上的宽度即可:

candlestick_ohlc(ax1, ohlc, width=0.001, colorup='#77d879', colordown='#db3f3f')

使用您的数据进行测试,看起来不错。

答案 1 :(得分:1)

似乎width的无证candlestick_ohlc参数是关键。将它乘以每个数据点之间的一小部分。由于您的数据以分钟为增量,因此应执行以下操作:

candlestick_ohlc(ax, tuples, width=.6/(24*60), colorup='g', alpha =.4);

要自动化,请使用连续数据点的日期之间的差异。例如:

width=0.6/(mdates.date2num(dates[1])-mdates.date2num(dates[0]))

注意这是一个常见问题解答,但链接并不明显。参见: