how to plot candlesticks in python

Alberto Aguilera picture Alberto Aguilera · Dec 10, 2018 · Viewed 14.8k times · Source

I´m trying to create a simple plot with candlesticks. For that I get the data from Yahoo and plot it using the function candlestick2_ohlc. The goal is to export the image in a jpg file using.

This is the code what I´m using:

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

My first question is: there is another simple way to do it? Could you please give me an example to work with finance data? I usually work with quantmod in R.

The second question is: In my example, there is no Date in the X axi. What can I do to show the plot with Dates in the X axi? I should transform the Date into a AX format but I don't know a simple way to do it.

Thanks

Answer

Mostafa Ghadimi picture Mostafa Ghadimi · Dec 9, 2019

There are many ways of how plotting candlesticks in python using different package like:

  1. mplfinance
  2. plotly
  3. finplot
  4. etc.

You can also create your own specialized version of candlesticks using matplotlib package.

mplfinance Package

You can install the package using the following command:

pip install mplfinance

Then, you should use it as the following:

  1. Indices should be from DatetimeIndex format.
  2. The dataset should have the columns named: High, Open, Close and Low. (it's case-sensitive)
  3. (optional) if you want to show the volume, the Volume named column is required.

PS 1: You can create DatetimeIndex using pandas to_datetime method. PS 2: You can rename a column using rename method on dataframe.

Sample:

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 Package

First you need to install the plotly package using:

pip install plotly

Then, you can plot the candle plots as easy as the following code:

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 Package

You can install finplot package using the following command:

pip install finplot

then, it's really easy to build a candlestick plot.

Example:

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