如何绘制烛台

问题描述 投票:0回答:4

我正在尝试用烛台创建一个简单的绘图。为此,我从雅虎获取数据并使用函数 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轴上没有Date。我该如何显示 X 轴上带有日期的绘图?我应该将日期转换为 AX 格式,但我不知道一个简单的方法。

python plot finance candlestick-chart
4个回答
17
投票

有很多方法可以使用不同的包在 python 中绘制烛台,例如:

  1. mplfinance
  2. 情节
  3. finplot
  4. 等等

您还可以使用

matplotlib
包创建您自己的专用烛台版本。

mplfinance 套餐

您可以使用以下命令安装该软件包:

pip install mplfinance

然后,您应该按以下方式使用它:

  1. 索引应采用
    DatetimeIndex
    格式。
  2. 数据集应具有名为:
    High
    Open
    Close
    Low
    的列。 (区分大小写)
  3. (可选)如果您想显示体积,则需要
    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 包

首先您需要使用以下命令安装

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 包

您可以使用以下命令安装 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()

8
投票

finplot 有工作日期:

import finplot as fplt
import yfinance
df = yfinance.download('AAPL')
fplt.candlestick_ochl(df[['Open', 'Close', 'High', 'Low']])
fplt.show()

finplot shows your dates

它不仅可以显示您的日期,而且还有许多改进(太多,无法在此列出)。

免责声明:我不喜欢matplotlib和plotly的API(以及性能和功能缺乏),所以创建了finplot。它已经拥有 mpl_finance 的 pypi 星星的 9%,所以检查一下!


3
投票

使用 Plotly,您可以用一行代码绘制烛台图。

df[['Open', 'High', 'Low', 'Close']]['2018-01-01':'20XX-XX-XX'].iplot(kind="candle")

在使用plotly之前,您需要在命令行中使用

pip
安装plotly和袖扣:

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

2
投票

你可以用 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()
© www.soinside.com 2019 - 2024. All rights reserved.