0

I am very new to using Python and especially new to using the Bokeh library. I am trying to plot a Choropleth map of the United States with the fill color of each state corresponding to their bee population of a year.

It shows the value when you hover over it, but only the states with a value of zero have color.

Link to an image of the output plot is here.

I know there is a big difference in the range (minimum:0, maximum: 310,000) which I believe is causing the problem. How can I change the range of the color map to not fill all of the higher values with grey?

Code for reference below:

from bokeh.models import LogColorMapper
from bokeh.palettes import YlGnBu9 as YlGnBu
from bokeh.sampledata.us_states import data as us_states
import pandas as pd
import numpy as np

bee_pop = pd.read_csv('./BeePopulation.csv')
us_states_df = pd.DataFrame(us_states).T
us_states_df = us_states_df[~us_states_df["name"].isin(['Alaska', "Hawaii", "District of 
                                                                               Columbia"])]
us_states_df["lons"] = us_states_df.lons.values.tolist()
us_states_df["lats"] = us_states_df.lats.values.tolist()
us_states_df = us_states_df.reset_index()
bee_2016 = bee_pop[bee_pop['Year']==2016]
us_states_df = us_states_df.merge(bee_2016[["State", "Pop"]], how="left", left_on="index", 
                                                                           right_on="State")
us_states_df.head()
us_states_datasource = {}
us_states_datasource["lons"] = us_states_df.lons.values.tolist()
us_states_datasource["lats"] = us_states_df.lats.values.tolist()
us_states_datasource["name"] = us_states_df.name.values.tolist()
us_states_datasource["BeePop"] = us_states_df.Pop.values.tolist()
fig = figure(plot_width=900, plot_height=600,
         title="United Bee Population Per State Choropleth Map",
         x_axis_location=None, y_axis_location=None,
         tooltips=[
                    ("Name", "@name"), ("Bee Population", "@BeePop")
                  ])

fig.grid.grid_line_color = None

fig.patches("lons", "lats", source=us_states_datasource,
        fill_color={'field': 'BeePop', 'transform': LogColorMapper(palette=YlGnBu[::-1])},
        fill_alpha=0.7, line_color="white", line_width=0.5)

show(fig)

Thank you in advance!

1 Answers1

0

The LogColorMapper has configurable high and low properties. Another option, of course, is to use a different color mapper, e.g. LinearColorMapper or CategorgicalColorMapper in conjunction with some categorical binning.

bigreddot
  • 33,642
  • 5
  • 69
  • 122