【问题标题】:Matplotlib Candlestick (Intraday) Chart is One Big BlobMatplotlib 烛台(日内)图表是一大块
【发布时间】:2016-04-25 16:24:54
【问题描述】:

我正在尝试使用 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()

这是我的输出的样子:

您可以辨认出烛台的垂直线,但是这些条看起来确实很宽。关于如何解决这个问题的任何想法?谢谢。

【问题讨论】:

  • 在一些雅虎数据上运行良好(使用每日数据),请发布您的实际数据。我所做的只是在此处更改此行:dates = pd.to_datetime(historic_df['time']),它看起来不错。出于某种原因,您似乎正在尝试在 1 个图表上绘制每小时绘制多天,这可以解释重叠...
  • 我在帖子中包含了指向pastebin 的链接,其中包含用于绘制我截取的图表的数据。不知道这是否会有所不同,但我的数据在日内,所以每个条目不是不同的一天,而是相隔 5-10 秒。

标签: python pandas matplotlib


【解决方案1】:

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

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

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

【讨论】:

  • 是的,做到了,不管怎样,我可以自动调整宽度,当我每天加载或不那么细粒度的数据时?
  • pr 到 mpl 使默认宽度更智能可能会被接受。
  • 对不起,我回复的有点晚了,但是你能详细说明一下你的 pr 是什么意思吗?
【解决方案2】:

似乎candlestick_ohlc 的未记录的width 参数是关键。将它乘以每个数据点之间一天的分数。由于您的数据是以分钟为单位的,因此应该这样做:

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

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

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

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

【讨论】:

  • 无法在任何地方找到有关如何实现自动化的信息 - 太棒了!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多