candlestick (original) (raw)
A Candlestick chart based on stock price data. This example demonstrates combining multiple glyphs. The non working days (weekends and bank holidays) are highlighted with an BoxAnnotation in light gray.
Details
Sampledata:
Bokeh APIs:
figure.segment, figure.vbar, bokeh.models.BoxAnnotation
Keywords:
candlestick
import pandas as pd
from bokeh.models import BoxAnnotation from bokeh.plotting import figure, show from bokeh.sampledata.stocks import MSFT
df = pd.DataFrame(MSFT)[60:120] df["date"] = pd.to_datetime(df["date"])
inc = df.close > df.open dec = df.open > df.close
non_working_days = df[['date']].assign(diff=df['date'].diff()-pd.Timedelta('1D')) non_working_days = non_working_days[non_working_days['diff']>=pd.Timedelta('1D')]
df['date'] += pd.Timedelta('12h') # move candles to the center of the day
TOOLS = "pan,wheel_zoom,box_zoom,reset,save"
p = figure(x_axis_type="datetime", tools=TOOLS, width=1000, height=400, title="MSFT Candlestick", background_fill_color="#efefef") p.xaxis.major_label_orientation = 0.8 # radians
boxes = [ BoxAnnotation(fill_color="#bbbbbb", fill_alpha=0.2, left=date-diff, right=date) for date, diff in non_working_days.values ] p.renderers.extend(boxes)
p.segment(df.date, df.high, df.date, df.low, color="black")
p.vbar(df.date[dec], pd.Timedelta('16h'), df.open[dec], df.close[dec], color="#eb3c40") p.vbar(df.date[inc], pd.Timedelta('16h'), df.open[inc], df.close[inc], fill_color="white", line_color="#49a3a3", line_width=2)
show(p)