[英]how to plot candlesticks in python
我正在尝试用烛台创建一个简单的图。 为此,我从 Yahoo 获取数据并使用函数candlestick2_ohlc 绘制它。 目标是使用 jpg 文件导出图像。
这是我正在使用的代码:
from pandas_datareader import data
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ohlc
import matplotlib.dates as mdates
import fix_yahoo_finance as yf
import datetime
start = datetime.date(2018, 1, 1)
end = datetime.date.today()
aapl = yf.download("AAPL",start,end)
aapl.reset_index(inplace=True)
aapl['Date'] = aapl.index.map(mdates.date2num)
fig, ax = plt.subplots()
plt.xlabel("Date")
plt.ylabel("Price")
candlestick2_ohlc(ax, aapl.Open, aapl.High, aapl.Low, aapl.Close, width=1, colorup='g')
plt.savefig('my_figure.png')
plt.show()
我的第一个问题是:还有另一种简单的方法吗? 你能给我举个例子来处理财务数据吗? 我通常在 R 中使用 quantmod。
第二个问题是:在我的示例中,X 轴中没有日期。 我该怎么做才能显示 X 轴中带有日期的图? 我应该将 Date 转换为 AX 格式,但我不知道一种简单的方法。
谢谢
有很多方法可以使用不同的包在 python 中绘制烛台,例如:
您还可以使用matplotlib
包创建自己的专用烛台版本。
您可以使用以下命令安装软件包:
pip install mplfinance
然后,您应该按以下方式使用它:
DatetimeIndex
格式。High
、 Open
、 Close
和Low
。 (区分大小写)Volume
命名列是必需的。 PS 1:您可以使用 pandas to_datetime
方法创建 DatetimeIndex。 PS 2:您可以使用数据框上的rename
方法重命名列。
样本:
import pandas as pd
import mplfinance as mpf
df = pd.read_csv("<dataframe-path>", index_col=0)
mpf.plot(df, type='candle', style='yahoo', volume=True)
首先,您需要使用以下命令安装plotly
包:
pip install plotly
然后,您可以像以下代码一样简单地绘制蜡烛图:
import plotly.graph_objects as go
import pandas as pd
from datetime import datetime
df = pd.read_csv('your_file_address')
fig = go.Figure(data=[go.Candlestick(x=df['name_of_time_column'],
open=df['name_of_open_column'],
high=df['name_of_high_column'],
low=df['name_of_low_column'],
close=df['name_of_close_column'])])
fig.show()
您可以使用以下命令安装 finplot 包:
pip install finplot
那么,构建烛台图真的很容易。
例子:
import finplot as fplt
import pandas as pd
df = pd.read_csv("<data-path.csv>")
fplt.candlestick_ochl(df[['Open', 'Close', 'High', 'Low']])
fplt.show()
finplot有工作日期:
import finplot as fplt
import yfinance
df = yfinance.download('AAPL')
fplt.candlestick_ochl(df[['Open', 'Close', 'High', 'Low']])
fplt.show()
它不仅显示您的日期,而且还有许多改进(太多无法在此列出)。
免责声明:我不喜欢 matplotlib 和 plotly 的 API(以及性能和缺乏功能),因此创建了 finplot。 它已经有 9% 的 mpl_finance 的 pypi 星星,所以检查一下!
使用 Plotly,您可以用一行代码绘制烛台图。
df[['Open', 'High', 'Low', 'Close']]['2018-01-01':'20XX-XX-XX'].iplot(kind="candle")
在使用 plotly 之前,您需要在命令行中使用pip
安装 plotly 和 cufflinks:
pip install plotly
pip install cufflinks
您还需要在 Jupiter Notebook 的顶部导入以下内容:
from plotly import __version__
import cufflinks as cf
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode (connected=True)
cf.go_offline()
你可以用 matplot 做任何事情(使用 Boxplot)
df = pdr.data.get_data_yahoo(ticker, start='2012-01-01', end='2012-10-10')
df = df[['Open', 'High', 'Low', 'Close']]
fig, ax1 = plt.subplots(figsize=(14,7), num='figure name')
ax1.set_title('box title')
ax1.yaxis.grid(True, linestyle='-', which='major', color='lightgrey', alpha=0.5)
ax1.xaxis.grid(True, linestyle='-', which='major', color='lightgrey', alpha=0.5)
bp = ax1.boxplot(df, patch_artist=True, labels=df.index.astype(str))
# green up, red down
for count_box in range(len(df.index)):
if (df.iloc[count_box,0]-df.iloc[count_box,3])>=0:
plt.setp(bp['boxes'][count_box], color='red')
else:
plt.setp(bp['boxes'][count_box], color='green')
plt.xticks(rotation=30)
plt.show() #or plt.savefig()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.