gpt4 book ai didi

python - 日期时间格式的 Matplotlib 日期

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:14 28 4
gpt4 key购买 nike

我正在绘制烛台图 (ohlc+volume),不幸的是我不知道如何以日期时间格式显示日期。几种方法都不起作用。

import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ohlc
from matplotlib import style
import pandas as pd

style.use('classic')

def graph(candlestick_list):
df = pd.DataFrame(candlestick_list)
ohlc = df[['date', 'open', 'high', 'low', 'close']]

ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2 = plt.subplot2grid((6,1), (5,0), rowspan=5, colspan=1, sharex=ax1)
candlestick_ohlc(ax1, ohlc.values, width=0.5, colorup='g', colordown='r')
ax2.bar(df['date'], df['volume'])
plt.show()

不幸的是,以下方法对我不起作用:

df['date'] = pd.to_datetime(df['date'], unit='s')

TypeError: 不支持的操作数类型 -: 'Timestamp' 和 'float'

或者这个:

import matplotlib.dates as mdates
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

ValueError:年份 4095909 超出范围

有人有想法吗?非常感谢!

PS:下面的列表可以用来测试代码

candlestick_list = [{'date': 1496332800, 'high': 215.3209, 'low': 200.3, 'open': 211.18, 'close': 206.47999999, 'volume': 2432435.9201853, 'quoteVolume': 11813.26856836, 'weightedAverage': 205.90710404}, {'date': 1496340000, 'high': 212.0001, 'low': 205.75400533, 'open': 206.47999992, 'close': 207.85, 'volume': 1301024.6514137, 'quoteVolume': 6250.47612412, 'weightedAverage': 208.14808753}, {'date': 1496347200, 'high': 212.44999999, 'low': 206.9813717, 'open': 208.49981874, 'close': 209.99811003, 'volume': 1062083.1773221, 'quoteVolume': 5056.26107738, 'weightedAverage': 210.05307302}, {'date': 1496354400, 'high': 213.20999999, 'low': 209.61231001, 'open': 210, 'close': 211.44, 'volume': 705968.23009208, 'quoteVolume': 3335.35026592, 'weightedAverage': 211.66239639}, {'date': 1496361600, 'high': 219, 'low': 210.81410968, 'open': 211.43999994, 'close': 215.41715998, 'volume': 972040.25543603, 'quoteVolume': 4500.001815, 'weightedAverage': 216.00885852}]

最佳答案

尝试将日期转换为 Matplotlib 格式。通常,Matplotlib 会识别并自动转换来自 DataFrame 的日期,但也有很多奇怪的情况。通常,当事情不起作用时,请手动进行自己的转换。

import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ohlc
from matplotlib import style
import pandas as pd
import matplotlib.dates as mdates

def graph(candlestick_list):
df = pd.DataFrame(candlestick_list)
df['date'] = pd.to_datetime(df['date'], unit='s')
df['mdate'] = [mdates.date2num(d) for d in df['date']]

ohlc = df[['mdate', 'open', 'high', 'low', 'close']]

ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2 = plt.subplot2grid((6,1), (5,0), rowspan=5, colspan=1, sharex=ax1)
candlestick_ohlc(ax1, ohlc.values, width=0.05, colorup='g', colordown='r')
ax2.bar(df['mdate'], df['volume'])
ax2.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=60)
plt.show()

Documentation for date2num() .注意我添加了一个单独的 mdate 列。对于调试很有用,如果您还需要将常规 Pandas 日期用于其他目的。在这个有限的、函数内的上下文中,保留多个日期表示可能有点矫枉过正。我还减薄了 OHLC 条的宽度,并旋转了日期刻度,以便我可以更好地看到它们。 YMMV 关于此类样式调整。

最后,如果列表推导式的使用因为“它不是矢量化的”而冒犯了您的感受,您可以一次性转换为 matplotlib 样式的日期:

df['mdate'] = mdates.date2num(df.date.dt.to_pydatetime())

关于python - 日期时间格式的 Matplotlib 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44951178/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com