Exercise: Plot temperature anomaly monthly average for a given year and month by lat/lon with bokeh.plotting.image_rgba()
Note: For your convienience, I'm providing an RGBAColorMapper
In [ ]:
from utils.colormap import RGBAColorMapper
In [ ]:
# Get the netCDF4 variable for temperature anomaly
import netCDF4
data = netCDF4.Dataset('data/Land_and_Ocean_LatLong1.nc')
t = data.variables['temperature']
In [ ]:
# Initialize the colormap with a bokeh palette and the low and high values for the scale.
from bokeh.palettes import RdBu11
colormap = RGBAColorMapper(-6, 6, RdBu11)
In [ ]:
# Write a function ``get_slice(temperature_variable, year, month)`` that given a temperature variable, year and month
# returns an array of rgba colors. (Hint: Use RGBAColorMapper.color()).
def get_slice(t, year, month):
i = (year - 1850)*12 + month - 1
return colormap.color(t[i, :, :])
In [ ]:
from bokeh.plotting import figure, output_notebook, show
In [ ]:
# Set output option
output_notebook()
In [ ]:
# Get image data for a given year and month using the ``get_slice`` function
image = get_slice(t, 1950, 1)
In [ ]:
# Create plot
# Tip: Make sure to set x_range and y_range appropriately
p = figure(width=900, height=500, x_axis_type=None, y_axis_type=None, x_range=[-180,180], y_range=[-90,90])
p.image_rgba(
image=[image],
x=[-180], y=[-90],
dw=[360], dh=[180], name='image'
)
In [ ]:
# Show plot
show(p)
In [ ]:
# Change the year and month and rerun the plot again.
image = get_slice(t, 1980, 8)
p = figure(width=900, height=500, x_axis_type=None, y_axis_type=None, x_range=[-180,180], y_range=[-90,90])
p.image_rgba(
image=[image],
x=[-180], y=[-90],
dw=[360], dh=[180], name='image'
)
show(p)
Exercise: Overlay the worldmap boundaries in the temperature image plot
In [ ]:
# Get worldmap data
import pandas as pd
import utils.world_countries as wc
world_countries = wc.data.copy()
worldmap = pd.DataFrame.from_dict(world_countries, orient='index')
In [ ]:
# Create your plot
p = figure(width=900, height=500, x_axis_type=None, y_axis_type=None, x_range=[-180,180], y_range=[-90,90])
p.image_rgba(
image=[image],
x=[-180], y=[-90],
dw=[360], dh=[180], name='image'
)
p.patches(xs=worldmap['lons'], ys=worldmap['lats'], fill_color="white", fill_alpha=0,
line_color="black", line_width=0.5)
In [ ]:
# Show plot
show(p)
In [ ]: