python - 无法在 matplotlib 的 xtick 标签中正确获取日期
问题描述
嗨,我正在尝试使用 matplotlib 中的矩形补丁制作烛台,但 xaxis 上的日期不正确。我必须使用一个数字作为 x 值来创建矩形形状,现在我想用数据框索引中的相应日期替换这些值。这是代码:`
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.dates as mdates
import yfinance as yf
import numpy as np
import datetime as dt
df = yf.download('adaniports.ns', '2015-01-01', '2016-01-01')
df.rename(columns={'Adj Close': 'Adj_close'}, inplace= True)
def candlestick(df, colorup= '#2bff1c', colordown= '#ff5e00'):
df.reset_index(inplace= True)
df['Days_num'] = df.Date.apply(lambda x: x - df.Date[0])
df.set_index('Date', inplace= True)
df.Days_num = df.Days_num.apply(lambda x: x/np.timedelta64(1, 'D')).astype(int)
fig, ax = plt.subplots(figsize= (12, 8))
ax.plot([df.Days_num, df.Days_num], [df.High, df.Low], color= 'k', solid_capstyle='round', linewidth= 0.8)
for x in range(len(df.index)):
if df.Close[x] > df.Open[x]:
color = colorup
else:
color = colordown
rec = mpl.patches.Rectangle((df.Days_num[x] - 0.25, df.Open[x]), 0.5, (df.Close[x] - df.Open[x]), facecolor= color,\
edgecolor= 'k', linewidth= 0.5, capstyle= 'round', zorder= 3)
ax.add_patch(rec)
ax.set_xticklabels([x.strftime('%d-%m-%y') for x in df.index.tolist()])
ax.xaxis.set_major_locator(mdates.AutoDateLocator())
ax.grid(True)
fig.tight_layout()
fig.autofmt_xdate()
plt.show()
candlestick(df)
这是输出: 如您所见,范围是一年,但 x-ticks 仅绘制 1 个月。
我知道有像 mplfinance 这样的库,但我宁愿这样做,因为我需要对其进行自定义,这在这些库中是困难的。
解决方案
推荐阅读
- lua - Lua:字符的类型
- asp.net-mvc - 在 asp.net mvc 核心标识中覆盖 AuthorizeCore
- sql - 使用双引号插入 Postgres DB 不起作用
- wpf - Dragablz梯形标签背景(WPF)
- sabre - 增强型AirBookRQ API 的 status="NotProcessed"
- sas - 我可以有条件地将语句打印到外部 SAS 程序文件吗?
- javascript - 过滤列表而不是 D3 中的选择下拉列表
- reactjs - 在特定的 ASPNET Core 项目路线中反应 SPA
- deeplearning4j - Wildfly 中的 org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException
- oracle - 在引用自身集合的 PL/SQL 块中定义记录类型