Thanks to theidioms.com

Plotting in Bokeh

Tutorial

Plotting in Bokeh

Plotting in BokehPlotting in Bokeh

A Bokeh Line plot can be created simply by following these steps:

  • Create a blank figure with necessary arguments: p = figure(…)
  • Call a glyph method such as p.line on the figure
  • Show the figure
#line plot Example with BoxAnnotation usage

#Importing necessary modules
from bokeh.models import BoxAnnotation #for highlighting

#Preparing the plot data
#Taking gulcose data from bokeh sample data
from bokeh.sampledata.glucose import data 
week=data.loc['2010-10-01':'2010-10-08'] #taking one week data
x=week.index
y=week.glucose

#Create a new plot 
p = figure(x_axis_type="datetime", title="Glocose Variation", plot_height=350, plot_width=800) #note to specify x_axis type as datetime to make x axis as datatime
p.xgrid.grid_line_color=None
p.ygrid.grid_line_alpha=0.5
p.xaxis.axis_label = 'Time'
p.yaxis.axis_label = 'GulcoseValue(gm/cc)'
box_left = pd.to_datetime('2010-10-4')
box_right = pd.to_datetime('2010-10-6')

#Configure BoxAnnotation
box = BoxAnnotation(left=box_left, right=box_right,
                    line_width=1, line_color='black', line_dash='dashed',
                    fill_alpha=0.2, fill_color='orange')

#Add box layout to figure
p.add_layout(box)

#Add a line renderer
p.line(x,y,line_width=2)

#Show the results
show(p) 

OUTPUT:

Plotting in Bokeh

Scatter Plot:

Scatter plot can be created easily with the following steps:

  • Create a blank figure with necessary arguments: p = figure(…)
  • Call a glyph method such as p.circle on the figure
  • Show the figure
#Scatter plot Example

#Preparing plot data
from bokeh.sampledata.autompg import autompg 

#See relationships between horse power and acceleration 
x=autompg.hp
y=autompg.accel

# create a new plot with default tools, using figure
p = figure(plot_width=600, plot_height=400,title="Horse Power & Accleration")
p.xaxis.axis_label = 'Horse power'
p.yaxis.axis_label = 'Acceleration'

# add a circle renderer with x and y coordinates, size, color, and alpha
p.circle(x,y, size=15, line_color="navy", fill_color="orange", fill_alpha=0.5) 

# show the results
show(p) 

OUTPUT:

Plotting in Bokeh

Bar Chart:

A bar chart can be created easily with the following steps:

  • Create a blank figure with necessary arguments: p = figure(…)
  • Call a glyph method such as p.vbar on the figure
  • Show the figure
#Bar chart Example

#Importing necessary modules
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral6

#Preparing data as pandas dataframe
gapminder_regions=pd.read_csv('https://github.com/PHI-Toolkit/docker-jupyterhub/raw/master/.bokeh/data/gapminder_regions.csv')
print(gapminder_regions.head(3))

#Data processing to find how many countries are there in each group
df = gapminder_regions.groupby('Group')['ID'].nunique() 
regions=gapminder_regions['Group'].unique()
counts=[]
print(regions)
for x in regions:
    counts.append(df[x])
print(counts)


#Set the x_range to the list of categories above
p = figure(x_range=regions, plot_height=250,plot_width=800, title="No.of Countries in Regions")

#Categorical values can also be used as coordinates
p.vbar(x=regions, top=counts, color=Spectral6,width=0.9)

#Set some properties to make the plot look better
p.xgrid.grid_line_color = None
p.y_range.start = 0

show(p)

OUTPUT:

    Country               Group  ID
0    Angola  Sub-Saharan Africa  AO
1     Benin  Sub-Saharan Africa  BJ
2  Botswana  Sub-Saharan Africa  BW
['Sub-Saharan Africa' 'South Asia' 'Middle East & North Africa' 'America'
 'Europe & Central Asia' 'East Asia & Pacific']
[50, 8, 21, 52, 66, 46]
Plotting in Bokeh
#Example of Stacked bar chart
from bokeh.palettes import GnBu3, OrRd3
years = ['2017', '2018', '2019']

fashion_items=['Jeans','Bags','Shoe','Shirt','Belt']

exports = {'fashion_items' : fashion_items,
           '2017'   : [10, 13, 22, 33, 22],
           '2018'   : [53, 36, 45, 25, 45],
           '2019'   : [34, 28, 45, 45, 54]}

imports = {'fashion_items' : fashion_items,
           '2017'   : [-20,-15 , -28, -38, -29],
           '2018'   : [-60, -39, -50, -30, -45],
           '2019'   : [-38, -29, -49, -49, -59]}

p = figure(y_range=fashion_items, plot_height=250,plot_width=800, x_range=(-500, 500), title="Fashion items import/export, by year")

p.hbar_stack(years, y='fashion_items', height=0.9, color=GnBu3, source=ColumnDataSource(exports),
             legend_label=["%s exports" % x for x in years])

p.hbar_stack(years, y='fashion_items', height=0.9, color=OrRd3, source=ColumnDataSource(imports),
             legend_label=["%s imports" % x for x in years])

p.y_range.range_padding = 0.1
p.ygrid.grid_line_color = None
p.legend.location = "center_left"

show(p)

OUTPUT:

Plotting in Bokeh
#Mixed bar chart Example

from bokeh.models import FactorRange

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ['2015', '2016', '2017']

data = {'fruits' : fruits,
        '2015'   : [2, 1, 4, 3, 2, 4],
        '2016'   : [5, 3, 3, 2, 4, 6],
        '2017'   : [3, 2, 4, 4, 5, 3]}

# this creates [ ("Apples", "2015"), ("Apples", "2016"), ("Apples", "2017"), ("Pears", "2015), ... ]
x = [ (fruit, year) for fruit in fruits for year in years ]
counts = sum(zip(data['2015'], data['2016'], data['2017']), ()) # like an hstack

source = ColumnDataSource(data=dict(x=x, counts=counts))

p = figure(x_range=FactorRange(*x), plot_height=250, title="Fruit Counts by Year")

p.vbar(x='x', top='counts', width=0.9, source=source)

p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xaxis.major_label_orientation = 1
p.xgrid.grid_line_color = None

show(p)

OUTPUT:

Plotting in Bokeh

Pie Chart:

Pie chart can be created easily with following steps:

  • Create a blank figure with necessary arguments: p = figure(…)
  • Call a glyph method such as p.wedge on the figure
  • Show the figure
#Importing necessary modules
from math import pi
from bokeh.io import output_file, show
from bokeh.palettes import Spectral6
from bokeh.plotting import figure
from bokeh.transform import cumsum

#Data preparation for plot
gapminder_regions=pd.read_csv('https://github.com/PHI-Toolkit/docker-jupyterhub/raw/master/.bokeh/data/gapminder_regions.csv')
df = gapminder_regions.groupby('Group')['ID'].nunique()
data = pd.Series(df).reset_index(name='value').rename(columns={'Group':'Regions'})
print(data)
data['angle'] = data['value']/data['value'].sum() * 2*pi
data['color'] = Spectral6

#Create necessary figure
p = figure(plot_height=350, title="World Regions by Countries", toolbar_location=None,
           tools="hover", tooltips="@Regions: @value", x_range=(-0.5, 1.0))

#Create wedge for defining pie chart
p.wedge(x=0, y=1, radius=0.4,
        start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
        line_color="white", fill_color='color', legend_field='Regions', source=data)

p.axis.axis_label=None
p.axis.visible=False
p.grid.grid_line_color = None

show(p)

OUTPUT:

                      Regions  value
0                     America     52
1         East Asia & Pacific     46
2       Europe & Central Asia     66
3  Middle East & North Africa     21
4                  South Asia      8
5          Sub-Saharan Africa     50
Plotting in Bokeh

Are you interested in working with data? Get a free trial month of LinkedIn Learning and learn Data Science and Machine Learning courses using Python, R, and SQL from top instructors.

Enroll in any one of the courses from the following fields today on LinkedIn Learning and start your free month of learning:

Disclaimer: When you subscribe to LinkedIn Learning, we may earn a small commission as an affiliate. We love the platform so much so that we have been using it ourselves at The Click Reader.

Plotting in BokehPlotting in Bokeh

Leave your thought here

Your email address will not be published. Required fields are marked *