使用Pandas和Matplotlib绘制Candlestick_OHLC一分钟的条形图

时间:2017-01-24 07:01:08

标签: python pandas matplotlib

给出以下Pandas数据帧示例

                    date    open    high     low   close    volume
0    2015-03-13 08:00:00  71.602  71.637  71.427  71.539  0.000249
1    2015-03-13 08:01:00  71.541  71.563  71.461  71.501  0.000215
2    2015-03-13 08:02:00  71.521  71.537  71.504  71.533  0.000048
3    2015-03-13 08:03:00  71.530  71.530  71.510  71.524  0.000016
4    2015-03-13 08:04:00  71.504  71.578  71.504  71.515  0.000045
5    2015-03-13 08:05:00  71.524  71.581  71.522  71.538  0.000062
6    2015-03-13 08:06:00  71.562  71.621  71.542  71.550  0.000095
7    2015-03-13 08:07:00  71.555  71.576  71.544  71.565  0.000051
8    2015-03-13 08:08:00  71.555  71.566  71.554  71.565  0.000023
9    2015-03-13 08:09:00  71.564  71.564  71.502  71.504  0.000017
10   2015-03-13 08:10:00  71.508  71.549  71.486  71.516  0.000097
11   2015-03-13 08:11:00  71.521  71.523  71.443  71.447  0.000103
12   2015-03-13 08:12:00  71.451  71.496  71.444  71.480  0.000206
13   2015-03-13 08:13:00  71.473  71.485  71.389  71.418  0.000147
14   2015-03-13 08:14:00  71.424  71.442  71.394  71.398  0.000107
15   2015-03-13 08:15:00  71.393  71.415  71.350  71.356  0.000141
16   2015-03-13 08:16:00  71.377  71.463  71.366  71.436  0.000142
17   2015-03-13 08:17:00  71.428  71.467  71.391  71.440  0.000091
18   2015-03-13 08:18:00  71.357  71.450  71.353  71.420  0.000147
19   2015-03-13 08:19:00  71.420  71.476  71.415  71.439  0.000062
20   2015-03-13 08:20:00  71.443  71.471  71.403  71.435  0.000196
21   2015-03-13 08:21:00  71.442  71.475  71.425  71.469  0.000032

如何绘制一分钟烛台OHLC条显示x轴上的分钟时间帧?

我试过了,但它没有用

df = df[['date', 'open', 'high', 'low', 'close', 'volume']]
df = df.reset_index()
f1 = plt.subplot2grid((6, 4), (1, 0), rowspan=6, colspan=4, axisbg='#07000d')
f1.xaxis.set_major_formatter(mdates.DateFormatter('%y-%m-%d %H:%M:%S'))
candlestick_ohlc(f1, df.values, width=.6, colorup='#53c156', colordown='#ff1717')
plt.ylabel('Stock Price')
plt.xlabel('Date Hours:Minutes')
plt.show()

3 个答案:

答案 0 :(得分:10)

您需要将日期转换为mdates.date2num,因为

  

时间必须采用浮动日格式 - 请参阅date2num

然后我尝试实施this solution

import pandas as pd

import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ohlc
import matplotlib.dates as mdates

#if necessary convert to datetime
df.date = pd.to_datetime(df.date)

df = df[['date', 'open', 'high', 'low', 'close', 'volume']]
df["date"] = df["date"].apply(mdates.date2num)

f1 = plt.subplot2grid((6, 4), (1, 0), rowspan=6, colspan=4, axisbg='#07000d')
candlestick_ohlc(f1, df.values, width=.6, colorup='#53c156', colordown='#ff1717')
f1.xaxis_date()
f1.xaxis.set_major_formatter(mdates.DateFormatter('%y-%m-%d %H:%M:%S'))

plt.xticks(rotation=45)
plt.ylabel('Stock Price')
plt.xlabel('Date Hours:Minutes')
plt.show()

答案 1 :(得分:1)

作为对 Jazrael 回答的更新,rules:if 有一个新的 API 可以为您处理 matplotlib 工作。现在你可以调用:

  import pandas as pd
  import mplfinance as mpf

  daily = pd.read_csv('examples/data/SP500_NOV2019_Hist.csv',index_col=0,parse_dates=True)
  daily.index.name = 'Date'

  mpf.plot(daily, type='candle')

您也不必担心 Jazrael 提到的日期数据类型转换。

mplfinance

答案 2 :(得分:0)

hack只是简单地减小烛台宽度。 像15分钟图表宽度= 0.01