eclipse (original) (raw)

A map plot using Google search interest data to follow the path of an eclipse across the United States. This example demonstrates using aLinearColorMapper and a color bar.

Details

Sampledata:

bokeh.sampledata.us_states

Bokeh APIs:

figure.patches, bokeh.models.ColumnDataSource, bokeh.models.LinearColorMapper, bokeh.models.ColorBar

More info:

Color bars

Keywords:

colorbar, label, map, patches

from os.path import dirname, join, realpath

import pandas as pd import shapefile as shp

from bokeh.models import ColumnDataSource, Label from bokeh.plotting import figure, show from bokeh.sampledata.us_states import data from bokeh.transform import linear_cmap

ROOT = dirname(realpath(file))

states = pd.DataFrame.from_dict(data, orient="index") states.drop(["AK", "HI"], inplace=True)

trends = pd.read_csv(join(ROOT, "eclipse_data/trends.csv"))

df = states.merge(trends, left_on="name", right_on="Region")

totality_path = shp.Reader(join(ROOT, "eclipse_data/upath17")).shapes()[0]

p = figure( width=1000, height=600, background_fill_color="#333344", tools="", toolbar_location=None, x_axis_location=None, y_axis_location=None, )

p.grid.grid_line_color = None

p.title.text = "Google Search Trends and the Path of Solar Eclipse, 21 August 2017" p.title.align = "center" p.title.text_font_size = "21px" p.title.text_color = "#333344"

source = ColumnDataSource(data=dict( state_xs=df.lons, state_ys=df.lats, trend=df["solar eclipse"], ))

us = p.patches( "state_xs", "state_ys", source=source, fill_color=linear_cmap("trend", palette="TolYlOrBr5", low=0, high=100), line_color="#333344", line_width=1, )

p.x_range.renderers = p.y_range.renderers = [us]

totality_x, totality_y = zip(*totality_path.points) p.patch( totality_x, totality_y, fill_color="black", fill_alpha=0.7, line_color=None, )

p.add_layout(Label( text="Solar eclipse path of totality", x=-76.3, y=31.4, angle=-36.5, angle_units="deg", text_baseline="middle", text_font_size="11px", text_color="silver", ))

p.add_layout(us.construct_color_bar( title='Popularity of "solar eclipse" search term', location="bottom_left", orientation="horizontal", title_text_font_size="16px", title_text_font_style="bold", title_text_color="lightgrey", major_label_text_color="lightgrey", background_fill_alpha=0.0, ))

p.add_layout(Label( text="Source: Google Trends, NASA Scientific Visualization Studio", x=0, y=0, x_units="screen", y_units="screen", x_offset=40, y_offset=20, text_font_size="11px", text_color="gray", level="overlay", ))

show(p)