python - 来自熊猫数据框的烛台图,按日期替换索引
问题描述
这段代码给出了带有移动平均线的烛台图,但 x 轴在索引中,我需要 x 轴在日期中。需要进行哪些更改?
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ohlc
#date format in data-> dd-mm-yyyy
nif = pd.read_csv('data.csv')
#nif['Date'] = pd.to_datetime(nif['Date'], format='%d-%m-%Y', utc=True)
mavg = nif['Close'].ewm(span=50).mean()
mavg1 = nif['Close'].ewm(span=13).mean()
fg, ax1 = plt.subplots()
cl = candlestick2_ohlc(ax=ax1,opens=nif['Open'],highs=nif['High'],lows=nif['Low'],closes=nif['Close'],width=0.4, colorup='#77d879', colordown='#db3f3f')
mavg.plot(ax=ax1,label='50_ema')
mavg1.plot(color='k',ax=ax1, label='13_ema')
plt.legend(loc=4)
plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)
plt.show()
输出:
解决方案
过去,我对此也有很多“乐趣”……这是使用 mdates 的一种方法:
import pandas as pd
import pandas_datareader.data as web
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ohlc
import matplotlib.dates as mdates
ticker = 'MCD'
start = dt.date(2014, 1, 1)
#Gathering the data
data = web.DataReader(ticker, 'yahoo', start)
#Calc moving average
data['MA10'] = data['Adj Close'].rolling(window=10).mean()
data['MA60'] = data['Adj Close'].rolling(window=60).mean()
data.reset_index(inplace=True)
data['Date']=mdates.date2num(data['Date'].astype(dt.date))
#Plot candlestick chart
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = fig.add_subplot(111)
ax3 = fig.add_subplot(111)
ax1.xaxis_date()
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
ax2.plot(data.Date, data['MA10'], label='MA_10')
ax3.plot(data.Date, data['MA60'], label='MA_60')
plt.ylabel("Price")
plt.title(ticker)
ax1.grid(True)
plt.legend(loc='best')
plt.xticks(rotation=45)
candlestick_ohlc(ax1, data.values, width=0.6, colorup='g', colordown='r')
plt.show()
输出:
希望这可以帮助。
推荐阅读
- ssh - 使用 2FA 时,如何测试我是否已通过 SSH 成功连接到 IPython 内核的所有*五个*通道(shell、iopub、hb、stdin、控制)?
- bash - 将 Bash 中的变量作为参数扩展为 rsync
- html - 可以禁用外部服务 iframe 内的链接(或任何可点击元素),但允许滚动内部内容?
- javascript - 使用导入“无法在初始化之前访问 ModuleName”
- python - 如何检查一个表达式有多少个符号?
- asp.net-core - .NET Core 3.1 - 从中间件重定向不起作用
- php - Laravel 上未定义密码重置器 [webusers]
- ios - SwiftUI 在开关内填充视图
- linux - 带有包含变量的 grep 的 Bash 循环
- google-cloud-platform - gcloud 配置项目过滤器