ローソク足で簡単なプロットを作成しようとしています。そのために、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を使用します。
2番目の質問は次のとおりです。私の例では、X軸に日付がありません。 X軸に日付を含むプロットを表示するにはどうすればよいですか?日付をAX形式に変換する必要がありますが、簡単な方法がわかりません。
ありがとう
まず、以下を使用して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()
Plotlyを使用すると、1行のコードでローソク足チャートをプロットできます。
df[['Open', 'High', 'Low', 'Close']]['2018-01-01':'20XX-XX-XX'].iplot(kind="candle")
Plotlyを使用する前に、コマンドラインでplotlyとpip
を使用したカフリンクスをインストールする必要があります。
pip install plotly
pip install cufflinks
また、JupiterNotebookの上部に以下をインポートする必要があります。
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() ...