【问题标题】:Plot a line on a OHLC minutes graph by mpl_finance通过 mpl_finance 在 OHLC 分钟图上绘制一条线
【发布时间】:2018-10-09 03:47:25
【问题描述】:

使用下面的代码,我可以成功绘制 OHLC 图

names = pd.Series(data.index.strftime("%d-%m-%y").unique())
indexs = pd.Series(data.index.date).unique()

ohlc = data[data.index.date == indexs[0]].copy()

ohlc['mdate'] = [mdates.date2num(d) for d in ohlc.index]

ohlc['SMA10'] = ohlc["Close"].rolling(10).mean()

fig, ax = plt.subplots(figsize = (10,5))
mpl_finance.candlestick2_ohlc(ax,ohlc['Open'],ohlc['High'],ohlc['Low'],ohlc['Close'], width = 0.6)
xdate = ohlc.index
def mydate(x, pos):
    try:
        return xdate[int(x)]
    except IndexError:
        return ''
ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate))

fig.autofmt_xdate()
fig.tight_layout()

plt.show()

但是,当我添加这一行时
ax.plot(ohlc.mdate, ohlc["SMA10"], color ="green", label = "SMA50"), 我可以制作一个带有两条垂直尖齿线的空图。请问这里有什么问题?

                   Open    High     Low  ...    Volume          mdate  SMA10
Date_Time                                    ...                                
2018-02-13 11:55:00  7169.7  7172.4  7167.0  ...       444  736738.496528    NaN
2018-02-13 12:00:00  7171.6  7174.2  7164.2  ...       578  736738.500000    NaN
2018-02-13 12:05:00  7174.2  7174.7  7170.7  ...       458  736738.503472    NaN
2018-02-13 12:10:00  7172.0  7175.7  7171.2  ...       401  736738.506944    NaN
2018-02-13 12:15:00  7174.7  7176.7  7173.0  ...       389  736738.510417    NaN

这是我的数据列

Index(['Open', 'High', 'Low', 'Close', 'Volume', 'mdate', 'SMA10'], dtype='object')

【问题讨论】:

  • 分别绘制每个系列并观察 x 轴上的值。从图中可以看出,一个图有日期时间索引,而另一个有其他东西。这就是它显示在最右侧的原因

标签: python matplotlib plot


【解决方案1】:

替换

ax.plot(ohlc.mdate, ohlc["SMA10"], color ="green", label = "SMA50")

通过

ax.plot(ohlc.index, ohlc["SMA10"], color ="green", label = "SMA50")

【讨论】:

  • 替换 mdates 后出现以下错误。 ValueError: x 和 y 必须具有相同的第一维,但形状为 (1,) 和 (142,)
  • 这是新错误。 ValueError: view limit minimum -36837.26482638889 is less than 1 and is a invalid Matplotlib date value.如果您将非日期时间值传递给具有日期时间单位的轴,这通常会发生
  • 你必须在某个地方有你的日期,从你的例子中很难知道哪个变量有什么类型的数据。如果您在其上使用 date2num,则 ohlc.index 对于初学者来说不应该是数字。
  • 从 mpl_finance 的文档中我可以看到日期处理非常特殊,所以这是有道理的,这给您带来了很多麻烦
  • 我已经更详细地更新了这个问题。 Ohlc 具有 datetimeindex 类型的索引,我使用 date2num 创建了 mdate。我已经检查了这些示例,但仍然无法理解问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
相关资源
最近更新 更多