eclipse#
A map plot using Google search interest data to follow the path of an
eclipse across the United States. This example demonstrates using a
LinearColorMapper
and a color bar.
Details
- Sampledata:
- Bokeh APIs:
figure.patches
,bokeh.models.ColumnDataSource
,bokeh.models.LinearColorMapper
,bokeh.models.ColorBar
- More info:
- 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)