6

给定以下 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 柱,在 xaxis 上显示分钟时间范围?

我试过这个,但它不起作用

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

3 回答 3

15

注意:matplotlib.finance已从 mpl 中取出并移至其自己的模块中。 mplfinance现在可以在这里找到。

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

时间必须采用浮点天数格式 - 请参阅 date2num

然后我尝试实施这个解决方案

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()
于 2017-01-24T07:11:39.333 回答
2

作为 Jazrael 答案的更新,mplfinance有一个新的 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 提到的日期数据类型转换。

在此处输入图像描述

于 2021-04-01T21:16:19.473 回答
1

它的诀窍是简单地减少烛台宽度。喜欢 15 分钟图表宽度=0.01

于 2019-06-26T07:20:40.713 回答