diff --git a/_posts/python/maps/choropleth-maps/2015-06-30-Choropleth_maps.html b/_posts/python/maps/choropleth-maps/2015-06-30-Choropleth_maps.html index 45988c8e0dba..9de934652627 100644 --- a/_posts/python/maps/choropleth-maps/2015-06-30-Choropleth_maps.html +++ b/_posts/python/maps/choropleth-maps/2015-06-30-Choropleth_maps.html @@ -1,38 +1,35 @@ --- permalink: python/choropleth-maps/ -description: How to make Choropleth maps in Python with Plotly. -name: Choropleth Maps | plotly +description: How to make choropleth maps in Python with Plotly. +name: Choropleth Maps has_thumbnail: true thumbnail: thumbnail/choropleth.jpg layout: user-guide -name: Choropleth Maps language: python -title: Choropleth Maps | plotly +title: Python Choropleth Maps | Plotly display_as: maps has_thumbnail: true -page_type: example_index -order: 1 ipynb: ~notebook_demo/55 +order: 1 +page_type: u-guide --- {% raw %} -
Plotly's Python library is free and open source! Get started by downloading the client and reading the primer. +
Plotly's Python library is free and open source! Get started by downloading the client and reading the primer.
You can set up Plotly to work in online or offline mode, or in jupyter notebooks.
We also have a quick-reference cheatsheet (new!) to help you get started!
For the full county choropleth doc page checkout https://plot.ly/python/county-choropleth/
+import plotly.plotly as py
-from plotly.graph_objs import *
-
-trace1 = Choropleth(
- z=['1', '1', '1', '1', '1', '1', '1'],
- autocolorscale=False,
- colorscale=[[0, 'rgb(255,255,255)'], [1, 'rgb(186,58,51)']],
- hoverinfo='text',
- locationmode='USA-states',
- locations=['AR', 'GA', 'KY', 'MO', 'UT', 'TX', 'WY'],
- name='Republican',
- showscale=False,
- text=['Arkansas', 'Georgia', 'Kentucky', 'Missouri', 'Utah', 'Texas', 'Wyoming'],
- zauto=False,
- zmax=1,
- zmin=0,
-)
-trace2 = Choropleth(
- z=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
- autocolorscale=False,
- colorscale=[[0, 'rgb(255,255,255)'], [1, 'rgb(68,94,150)']],
- hoverinfo='text',
- locationmode='USA-states',
- locations=['CA', 'CI', 'DOC', 'IL', 'MD', 'NJ', 'NM', 'NY', 'OR', 'RI', 'VT'],
- name='Democrat',
- showscale=False,
- text=['California', 'Connecticut', 'District of Columbia', 'Illinois',
- 'Maryland', 'New Jersey', 'New Mexico', 'New York', 'Oregon',
- 'Rhode Island', 'Vermont'],
- zauto=False,
- zmax=1,
- zmin=0,
-)
-trace3 = Choropleth(
- z=[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
- autocolorscale=False,
- colorscale=[[0, 'rgb(255, 255, 255)'], [1, 'rgb(187, 170, 144)']],
- hoverinfo='text',
- locationmode='USA-states',
- locations=['CO', 'FL', 'MI', 'MN', 'NH', 'OH', 'VA', 'WI'],
- name='Swing State',
- showscale=False,
- text=['Colorado', 'Florida', 'Michigan', 'Minnesota',
- 'New Hampshire', 'Ohio', 'Virginia', 'Wisconsin'],
- zauto=False,
- zmax=1,
- zmin=0,
-)
+import plotly.figure_factory as ff
-data = Data([trace1, trace2, trace3])
-layout = Layout(
- autosize=False,
- geo=dict(
- countrycolor='rgb(102, 102, 102)',
- countrywidth=0.1,
- lakecolor='rgb(255, 255, 255)',
- landcolor='rgba(237, 247, 138, 0.28)',
- lonaxis=dict(
- gridwidth=1.5999999999999999,
- range=[-180, -50],
- showgrid=False
- ),
- projection=dict(
- type='albers usa'
- ),
- scope='usa',
- showland=True,
- showrivers=False,
- showsubunits=True,
- subunitcolor='rgb(102, 102, 102)',
- subunitwidth=0.5
- ),
- hovermode='closest',
- images=list([
- dict(
- x=1,
- y=0.6,
- sizex=0.155,
- sizey=0.4,
- source='http://i.imgur.com/Xe3f1zg.png',
- xanchor='right',
- xref='paper',
- yanchor='bottom',
- yref='paper'
- )
- ]),
- showlegend=True,
- title='<b>PACE Approved legislation</b>',
- width= 800,
- margin = dict(
- l=0,
- r=50,
- b=100,
- t=100,
- pad=4)
+import numpy as np
+import pandas as pd
+
+df_sample = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/laucnty16.csv')
+df_sample['State FIPS Code'] = df_sample['State FIPS Code'].apply(lambda x: str(x).zfill(2))
+df_sample['County FIPS Code'] = df_sample['County FIPS Code'].apply(lambda x: str(x).zfill(3))
+df_sample['FIPS'] = df_sample['State FIPS Code'] + df_sample['County FIPS Code']
+
+colorscale = ["#f7fbff","#ebf3fb","#deebf7","#d2e3f3","#c6dbef","#b3d2e9","#9ecae1",
+ "#85bcdb","#6baed6","#57a0ce","#4292c6","#3082be","#2171b5","#1361a9",
+ "#08519c","#0b4083","#08306b"]
+endpts = list(np.linspace(1, 12, len(colorscale) - 1))
+fips = df_sample['FIPS'].tolist()
+values = df_sample['Unemployment Rate (%)'].tolist()
+
+fig = ff.create_choropleth(
+ fips=fips, values=values, scope=['usa'],
+ binning_endpoints=endpts, colorscale=colorscale,
+ show_state_data=False,
+ show_hover=True, centroid_marker={'opacity': 0},
+ asp=2.9, title='USA by Unemployment %',
+ legend_title='% unemployed'
)
-fig = Figure(data=data, layout=layout)
-py.iplot(fig, filename='pace')
+py.iplot(fig, filename='choropleth_full_usa')
See https://plot.ly/python/reference/#choropleth for more information and chart attribute options!
+See https://plot.ly/python/reference/#choropleth for more information and chart attribute options!
Plotly's Python library is free and open source! Get started by downloading the client and reading the primer.
+
You can set up Plotly to work in online or offline mode, or in jupyter notebooks.
+
We also have a quick-reference cheatsheet (new!) to help you get started!
Note: United States County Choropleths
are available in version 2.4.1+
+Run pip install plotly --upgrade
to update your Plotly version
import plotly
+plotly.__version__
+
Every US state and county has an assined ID regulated by the US Federal Government under the term FIPS (Federal Information Processing Standards) codes. There are state codes and county codes: the 2016 state and county FIPS codes can be found at the US Census Website.
+Combine a state FIPS code (eg. 06
for California) with a county FIPS code of the state (eg. 059
for Orange county) and this new state-county FIPS code (06059
) uniquely refers to the specified state and county.
ff.create_choropleth
only needs a list of FIPS codes and a list of values. Each FIPS code points to one county and each corresponding value in values
determines the color of the county.
A simple example of this is a choropleth a few counties in California:
+ +import plotly.plotly as py
+import plotly.figure_factory as ff
+
+fips = ['06021', '06023', '06027',
+ '06029', '06033', '06059',
+ '06047', '06049', '06051',
+ '06055', '06061']
+values = range(len(fips))
+
+fig = ff.create_choropleth(fips=fips, values=values)
+py.iplot(fig, filename='choropleth of some cali counties - full usa scope')
+
Even if your FIPS values belong to a single state, the scope defaults to the entire United States as displayed in the example above. Changing the scope of the choropleth shifts the zoom and position of the USA map. You can define the scope with a list of state names and the zoom will automatically adjust to include the state outlines of the selected states.
+By default scope
is set to ['USA']
which the API treats as identical to passing a list of all 50 state names:
['AK', 'AL', 'CA', ...]
State abbreviations (eg. CA
) or the proper names (eg. California
) as strings are accepted. If the state name is not recognized, the API will throw a Warning and indicate which FIPS values were ignored.
Another param used in the example below is binning_endpoints
. If your values
is a list of numbers, you can bin your values into half-open intervals on the real line.
import plotly.plotly as py
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+
+df_sample = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/minoritymajority.csv')
+df_sample_r = df_sample[df_sample['STNAME'] == 'California']
+
+values = df_sample_r['TOT_POP'].tolist()
+fips = df_sample_r['FIPS'].tolist()
+
+colorscale = [
+ 'rgb(193, 193, 193)',
+ 'rgb(239,239,239)',
+ 'rgb(195, 196, 222)',
+ 'rgb(144,148,194)',
+ 'rgb(101,104,168)',
+ 'rgb(65, 53, 132)'
+]
+
+fig = ff.create_choropleth(
+ fips=fips, values=values, scope=['CA', 'AZ', 'Nevada', 'Oregon', ' Idaho'],
+ binning_endpoints=[14348, 63983, 134827, 426762, 2081313], colorscale=colorscale,
+ county_outline={'color': 'rgb(255,255,255)', 'width': 0.5}, round_legend_values=True,
+ legend_title='Population by County', title='California and Nearby States'
+)
+py.iplot(fig, filename='choropleth_california_and_surr_states_outlines')
+
import plotly.plotly as py
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+
+df_sample = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/minoritymajority.csv')
+df_sample_r = df_sample[df_sample['STNAME'] == 'Florida']
+
+values = df_sample_r['TOT_POP'].tolist()
+fips = df_sample_r['FIPS'].tolist()
+
+endpts = list(np.mgrid[min(values):max(values):4j])
+colorscale = ["#030512","#1d1d3b","#323268","#3d4b94","#3e6ab0",
+ "#4989bc","#60a7c7","#85c5d3","#b7e0e4","#eafcfd"]
+fig = ff.create_choropleth(
+ fips=fips, values=values, scope=['Florida'], show_state_data=True,
+ colorscale=colorscale, binning_endpoints=endpts, round_legend_values=True,
+ plot_bgcolor='rgb(229,229,229)',
+ paper_bgcolor='rgb(229,229,229)',
+ legend_title='Population by County',
+ county_outline={'color': 'rgb(255,255,255)', 'width': 0.5},
+ exponent_format=True,
+)
+py.iplot(fig, filename='choropleth_florida')
+
import plotly.plotly as py
+import plotly.figure_factory as ff
+
+import pandas as pd
+
+NE_states = ['Connecticut', 'Maine', 'Massachusetts', 'New Hampshire', 'Rhode Island', 'Vermont']
+df_sample = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/minoritymajority.csv')
+df_sample_r = df_sample[df_sample['STNAME'].isin(NE_states)]
+
+values = df_sample_r['TOT_POP'].tolist()
+fips = df_sample_r['FIPS'].tolist()
+
+colorscale = [
+ 'rgb(68.0, 1.0, 84.0)',
+ 'rgb(66.0, 64.0, 134.0)',
+ 'rgb(38.0, 130.0, 142.0)',
+ 'rgb(63.0, 188.0, 115.0)',
+ 'rgb(216.0, 226.0, 25.0)'
+]
+
+fig = ff.create_choropleth(
+ fips=fips, values=values,
+ scope=NE_states, county_outline={'color': 'rgb(255,255,255)', 'width': 0.5},
+ legend_title='Population per county'
+
+)
+fig['layout']['legend'].update({'x': 0})
+fig['layout']['annotations'][0].update({'x': -0.12, 'xanchor': 'left'})
+py.iplot(fig, filename='choropleth_new_england')
+
Below is a choropleth that uses several other parameters. For a full list of all available params call help(ff.create_choropleth)
simplify_county
determines the simplification factor for the counties. The larger the number, the fewer vertices and edges each polygon has. See http://toblerity.org/shapely/manual.html#object.simplify for more information.simplify_state
simplifies the state outline polygon. See the documentation for more information.
+Default for both simplify_county
and simplif_state
is 0.02Note: This choropleth uses a divergent categorical colorscale. See http://react-colorscales.getforge.io/ for other cool colorscales.
+ +import plotly.figure_factory as ff
+
+import pandas as pd
+
+scope = ['Oregon']
+df_sample = pd.read_csv(
+ 'https://raw.githubusercontent.com/plotly/datasets/master/minoritymajority.csv'
+)
+df_sample_r = df_sample[df_sample['STNAME'].isin(scope)]
+
+values = df_sample_r['TOT_POP'].tolist()
+fips = df_sample_r['FIPS'].tolist()
+
+colorscale = ["#8dd3c7", "#ffffb3", "#bebada", "#fb8072",
+ "#80b1d3", "#fdb462", "#b3de69", "#fccde5",
+ "#d9d9d9", "#bc80bd", "#ccebc5", "#ffed6f",
+ "#8dd3c7", "#ffffb3", "#bebada", "#fb8072",
+ "#80b1d3", "#fdb462", "#b3de69", "#fccde5",
+ "#d9d9d9", "#bc80bd", "#ccebc5", "#ffed6f",
+ "#8dd3c7", "#ffffb3", "#bebada", "#fb8072",
+ "#80b1d3", "#fdb462", "#b3de69", "#fccde5",
+ "#d9d9d9", "#bc80bd", "#ccebc5", "#ffed6f"]
+
+fig = ff.create_choropleth(
+ fips=fips, values=values, scope=scope,
+ colorscale=colorscale, round_legend_values=True,
+ simplify_county=0, simplify_state=0,
+ county_outline={'color': 'rgb(15, 15, 55)', 'width': 0.5},
+ state_outline={'width': 1},
+ legend_title='pop. per county',
+ title='Oregon'
+)
+
+py.iplot(fig, filename='choropleth_oregon_ono_simplification_factor')
+
import plotly.plotly as py
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+
+df_sample = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/laucnty16.csv')
+df_sample['State FIPS Code'] = df_sample['State FIPS Code'].apply(lambda x: str(x).zfill(2))
+df_sample['County FIPS Code'] = df_sample['County FIPS Code'].apply(lambda x: str(x).zfill(3))
+df_sample['FIPS'] = df_sample['State FIPS Code'] + df_sample['County FIPS Code']
+
+colorscale = ["#f7fbff","#ebf3fb","#deebf7","#d2e3f3","#c6dbef","#b3d2e9","#9ecae1",
+ "#85bcdb","#6baed6","#57a0ce","#4292c6","#3082be","#2171b5","#1361a9",
+ "#08519c","#0b4083","#08306b"]
+endpts = list(np.linspace(1, 12, len(colorscale) - 1))
+fips = df_sample['FIPS'].tolist()
+values = df_sample['Unemployment Rate (%)'].tolist()
+
+fig = ff.create_choropleth(
+ fips=fips, values=values,
+ binning_endpoints=endpts,
+ colorscale=colorscale,
+ show_state_data=False,
+ show_hover=True, centroid_marker={'opacity': 0},
+ asp=2.9, title='USA by Unemployment %',
+ legend_title='% unemployed'
+)
+py.iplot(fig, filename='choropleth_full_usa')
+
Note: the param offline_mode
will be renamed in a future version of Plotly. Enabling does activate the unselected
and selected
features of the centroid scatter points but since these features exist in Plotly Reference Library, offline_mode
can be set to True
and run in online mode.
See https://plot.ly/python/reference/#scatter-selected and https://plot.ly/python/reference/#scatter-unselected
+ +help(ff.create_choropleth)
+
Plotly's Python library is free and open source! Get started by downloading the client and reading the primer. +
Plotly's Python library is free and open source! Get started by downloading the client and reading the primer.
You can set up Plotly to work in online or offline mode, or in jupyter notebooks.
We also have a quick-reference cheatsheet (new!) to help you get started!