{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Mapboxgl Python Library for location data visualization\n", "\n", "https://github.com/mapbox/mapboxgl-jupyter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "from mapboxgl.viz import *\n", "from mapboxgl.utils import *\n", "\n", "# Must be a public token, starting with `pk`\n", "token = os.getenv('MAPBOX_ACCESS_TOKEN')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choropleths with interpolated color assignment from GeoJSON source" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "# create choropleth from polygon features stored as GeoJSON\n", "viz = ChoroplethViz('https://raw.githubusercontent.com/mapbox/mapboxgl-jupyter/master/examples/data/us-states.geojson', \n", " access_token=token,\n", " color_property='density',\n", " color_stops=create_color_stops([0, 50, 100, 500, 1500], colors='YlOrRd'),\n", " color_function_type='interpolate',\n", " line_stroke='--',\n", " line_color='rgb(128,0,38)',\n", " line_width=1,\n", " line_opacity=0.9,\n", " opacity=0.8,\n", " center=(-96, 37.8),\n", " zoom=3,\n", " below_layer='waterway-label',\n", " legend_layout='horizontal',\n", " legend_key_shape='bar',\n", " legend_key_borders_on=False)\n", "viz.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add 3-D Extrusion" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# adjust view angle\n", "viz.bearing = -15\n", "viz.pitch = 45\n", "\n", "# add extrusion to viz using interpolation keyed on density in GeoJSON features\n", "viz.height_property = 'density'\n", "viz.height_stops = create_numeric_stops([0, 50, 100, 500, 1500, 5000], 0, 500000)\n", "viz.height_function_type = 'interpolate'\n", "\n", "# render again\n", "viz.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choropleths with match-type color scheme from GeoJSON source" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "match_color_stops = [['Massachusetts', 'rgb(46,204,113)'],\n", " ['Utah', 'rgb(231,76,60)'],\n", " ['California', 'rgb(142,68,173)']]\n", "\n", "viz = ChoroplethViz('https://raw.githubusercontent.com/mapbox/mapboxgl-jupyter/master/examples/data/us-states.geojson', \n", " access_token=token,\n", " color_property='name', \n", " color_stops=match_color_stops, \n", " color_function_type='match', \n", " color_default='rgba(52,73,94,0.5)', \n", " opacity=0.8, \n", " center=(-96, 37.8), \n", " zoom=3, \n", " below_layer='waterway-label')\n", "viz.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vector polygon source with data-join technique\n", "\n", "In this configuration, properties in JSON data are used to calculate colors to style polygons from the vector source." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# must be JSON object (need to extend to use referenced JSON file)\n", "data = [{\"id\": \"01\", \"name\": \"Alabama\", \"density\": 94.65}, {\"id\": \"02\", \"name\": \"Alaska\", \"density\": 1.264}, {\"id\": \"04\", \"name\": \"Arizona\", \"density\": 57.05}, {\"id\": \"05\", \"name\": \"Arkansas\", \"density\": 56.43}, {\"id\": \"06\", \"name\": \"California\", \"density\": 241.7}, {\"id\": \"08\", \"name\": \"Colorado\", \"density\": 49.33}, {\"id\": \"09\", \"name\": \"Connecticut\", \"density\": 739.1}, {\"id\": \"10\", \"name\": \"Delaware\", \"density\": 464.3}, {\"id\": \"11\", \"name\": \"District of Columbia\", \"density\": 10065}, {\"id\": \"12\", \"name\": \"Florida\", \"density\": 353.4}, {\"id\": \"13\", \"name\": \"Georgia\", \"density\": 169.5}, {\"id\": \"15\", \"name\": \"Hawaii\", \"density\": 214.1}, {\"id\": \"16\", \"name\": \"Idaho\", \"density\": 19.15}, {\"id\": \"17\", \"name\": \"Illinois\", \"density\": 231.5}, {\"id\": \"18\", \"name\": \"Indiana\", \"density\": 181.7}, {\"id\": \"19\", \"name\": \"Iowa\", \"density\": 54.81}, {\"id\": \"20\", \"name\": \"Kansas\", \"density\": 35.09}, {\"id\": \"21\", \"name\": \"Kentucky\", \"density\": 110}, {\"id\": \"22\", \"name\": \"Louisiana\", \"density\": 105}, {\"id\": \"23\", \"name\": \"Maine\", \"density\": 43.04}, {\"id\": \"24\", \"name\": \"Maryland\", \"density\": 596.3}, {\"id\": \"25\", \"name\": \"Massachusetts\", \"density\": 840.2}, {\"id\": \"26\", \"name\": \"Michigan\", \"density\": 173.9}, {\"id\": \"27\", \"name\": \"Minnesota\", \"density\": 67.14}, {\"id\": \"28\", \"name\": \"Mississippi\", \"density\": 63.5}, {\"id\": \"29\", \"name\": \"Missouri\", \"density\": 87.26}, {\"id\": \"30\", \"name\": \"Montana\", \"density\": 6.858}, {\"id\": \"31\", \"name\": \"Nebraska\", \"density\": 23.97}, {\"id\": \"32\", \"name\": \"Nevada\", \"density\": 24.8}, {\"id\": \"33\", \"name\": \"New Hampshire\", \"density\": 147}, {\"id\": \"34\", \"name\": \"New Jersey\", \"density\": 1189}, {\"id\": \"35\", \"name\": \"New Mexico\", \"density\": 17.16}, {\"id\": \"36\", \"name\": \"New York\", \"density\": 412.3}, {\"id\": \"37\", \"name\": \"North Carolina\", \"density\": 198.2}, {\"id\": \"38\", \"name\": \"North Dakota\", \"density\": 9.916}, {\"id\": \"39\", \"name\": \"Ohio\", \"density\": 281.9}, {\"id\": \"40\", \"name\": \"Oklahoma\", \"density\": 55.22}, {\"id\": \"41\", \"name\": \"Oregon\", \"density\": 40.33}, {\"id\": \"42\", \"name\": \"Pennsylvania\", \"density\": 284.3}, {\"id\": \"44\", \"name\": \"Rhode Island\", \"density\": 1006}, {\"id\": \"45\", \"name\": \"South Carolina\", \"density\": 155.4}, {\"id\": \"46\", \"name\": \"South Dakota\", \"density\": 98.07}, {\"id\": \"47\", \"name\": \"Tennessee\", \"density\": 88.08}, {\"id\": \"48\", \"name\": \"Texas\", \"density\": 98.07}, {\"id\": \"49\", \"name\": \"Utah\", \"density\": 34.3}, {\"id\": \"50\", \"name\": \"Vermont\", \"density\": 67.73}, {\"id\": \"51\", \"name\": \"Virginia\", \"density\": 204.5}, {\"id\": \"53\", \"name\": \"Washington\", \"density\": 102.6}, {\"id\": \"54\", \"name\": \"West Virginia\", \"density\": 77.06}, {\"id\": \"55\", \"name\": \"Wisconsin\", \"density\": 105.2}, {\"id\": \"56\", \"name\": \"Wyoming\", \"density\": 5.851}, {\"id\": \"72\", \"name\": \"Puerto Rico\", \"density\": 1082}]\n", "\n", "# create choropleth map with vector source styling use data in JSON object\n", "viz = ChoroplethViz(data, \n", " access_token=token,\n", " vector_url='mapbox://mapbox.us_census_states_2015',\n", " vector_layer_name='states',\n", " vector_join_property='STATE_ID',\n", " data_join_property='id',\n", " color_property='density',\n", " color_stops=create_color_stops([0, 50, 100, 500, 1500], colors='YlOrRd'),\n", " line_stroke='dashed',\n", " line_color='rgb(128,0,38)',\n", " opacity=0.8,\n", " center=(-96, 37.8),\n", " zoom=3,\n", " below_layer='waterway-label',\n", " legend_layout='horizontal',\n", " legend_key_shape='bar',\n", " legend_key_borders_on=False)\n", "viz.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vector polygon source with data-join technique, categorical color scheme" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# must be JSON object (need to extend to use referenced JSON file)\n", "data = [{\"id\": \"01\", \"name\": \"Alabama\", \"density\": 94.65}, {\"id\": \"02\", \"name\": \"Alaska\", \"density\": 1.264}, {\"id\": \"04\", \"name\": \"Arizona\", \"density\": 57.05}, {\"id\": \"05\", \"name\": \"Arkansas\", \"density\": 56.43}, {\"id\": \"06\", \"name\": \"California\", \"density\": 241.7}, {\"id\": \"08\", \"name\": \"Colorado\", \"density\": 49.33}, {\"id\": \"09\", \"name\": \"Connecticut\", \"density\": 739.1}, {\"id\": \"10\", \"name\": \"Delaware\", \"density\": 464.3}, {\"id\": \"11\", \"name\": \"District of Columbia\", \"density\": 10065}, {\"id\": \"12\", \"name\": \"Florida\", \"density\": 353.4}, {\"id\": \"13\", \"name\": \"Georgia\", \"density\": 169.5}, {\"id\": \"15\", \"name\": \"Hawaii\", \"density\": 214.1}, {\"id\": \"16\", \"name\": \"Idaho\", \"density\": 19.15}, {\"id\": \"17\", \"name\": \"Illinois\", \"density\": 231.5}, {\"id\": \"18\", \"name\": \"Indiana\", \"density\": 181.7}, {\"id\": \"19\", \"name\": \"Iowa\", \"density\": 54.81}, {\"id\": \"20\", \"name\": \"Kansas\", \"density\": 35.09}, {\"id\": \"21\", \"name\": \"Kentucky\", \"density\": 110}, {\"id\": \"22\", \"name\": \"Louisiana\", \"density\": 105}, {\"id\": \"23\", \"name\": \"Maine\", \"density\": 43.04}, {\"id\": \"24\", \"name\": \"Maryland\", \"density\": 596.3}, {\"id\": \"25\", \"name\": \"Massachusetts\", \"density\": 840.2}, {\"id\": \"26\", \"name\": \"Michigan\", \"density\": 173.9}, {\"id\": \"27\", \"name\": \"Minnesota\", \"density\": 67.14}, {\"id\": \"28\", \"name\": \"Mississippi\", \"density\": 63.5}, {\"id\": \"29\", \"name\": \"Missouri\", \"density\": 87.26}, {\"id\": \"30\", \"name\": \"Montana\", \"density\": 6.858}, {\"id\": \"31\", \"name\": \"Nebraska\", \"density\": 23.97}, {\"id\": \"32\", \"name\": \"Nevada\", \"density\": 24.8}, {\"id\": \"33\", \"name\": \"New Hampshire\", \"density\": 147}, {\"id\": \"34\", \"name\": \"New Jersey\", \"density\": 1189}, {\"id\": \"35\", \"name\": \"New Mexico\", \"density\": 17.16}, {\"id\": \"36\", \"name\": \"New York\", \"density\": 412.3}, {\"id\": \"37\", \"name\": \"North Carolina\", \"density\": 198.2}, {\"id\": \"38\", \"name\": \"North Dakota\", \"density\": 9.916}, {\"id\": \"39\", \"name\": \"Ohio\", \"density\": 281.9}, {\"id\": \"40\", \"name\": \"Oklahoma\", \"density\": 55.22}, {\"id\": \"41\", \"name\": \"Oregon\", \"density\": 40.33}, {\"id\": \"42\", \"name\": \"Pennsylvania\", \"density\": 284.3}, {\"id\": \"44\", \"name\": \"Rhode Island\", \"density\": 1006}, {\"id\": \"45\", \"name\": \"South Carolina\", \"density\": 155.4}, {\"id\": \"46\", \"name\": \"South Dakota\", \"density\": 98.07}, {\"id\": \"47\", \"name\": \"Tennessee\", \"density\": 88.08}, {\"id\": \"48\", \"name\": \"Texas\", \"density\": 98.07}, {\"id\": \"49\", \"name\": \"Utah\", \"density\": 34.3}, {\"id\": \"50\", \"name\": \"Vermont\", \"density\": 67.73}, {\"id\": \"51\", \"name\": \"Virginia\", \"density\": 204.5}, {\"id\": \"53\", \"name\": \"Washington\", \"density\": 102.6}, {\"id\": \"54\", \"name\": \"West Virginia\", \"density\": 77.06}, {\"id\": \"55\", \"name\": \"Wisconsin\", \"density\": 105.2}, {\"id\": \"56\", \"name\": \"Wyoming\", \"density\": 5.851}, {\"id\": \"72\", \"name\": \"Puerto Rico\", \"density\": 1082}]\n", "\n", "match_color_stops = [['Massachusetts', 'rgb(46,204,113)'],\n", " ['Utah', 'rgb(231,76,60)'],\n", " ['California', 'rgb(142,68,173)']]\n", "\n", "# create choropleth map with vector source styling use data in JSON object\n", "viz = ChoroplethViz(data, \n", " access_token=token,\n", " vector_url='mapbox://mapbox.us_census_states_2015',\n", " vector_layer_name='states',\n", " vector_join_property='STATE_ID',\n", " data_join_property='id',\n", " color_property='name',\n", " color_stops=match_color_stops,\n", " color_default = 'rgba(52,73,94,0.5)', \n", " opacity=0.8,\n", " center=(-96, 37.8),\n", " zoom=3,\n", " below_layer='waterway-label')\n", "viz.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add 3-D Extrusion to Vector Choropleth Map" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# adjust view angle\n", "viz.bearing = -15\n", "viz.pitch = 45\n", "\n", "# add extrusion to viz using interpolation keyed on density in GeoJSON features\n", "viz.height_property = 'density'\n", "viz.height_stops = create_numeric_stops([0, 50, 100, 500, 1500, 5000], 0, 500000)\n", "viz.height_function_type = 'interpolate'\n", "\n", "# render again\n", "viz.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Vector polygon source joined to data in a local Pandas dataframe" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Load data from sample csv\n", "import pandas as pd\n", "data_url = 'https://raw.githubusercontent.com/mapbox/mapboxgl-jupyter/master/examples/data/2010_us_population_by_postcode.csv'\n", "df = pd.read_csv(data_url).round(3)\n", "df.head(2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Group pandas dataframe by a value\n", "measure = '2010 Census Population'\n", "dimension = 'Zip Code ZCTA'\n", "\n", "data = df[[dimension, measure]].groupby(dimension, as_index=False).mean()\n", "color_breaks = [round(data[measure].quantile(q=x*0.1), 2) for x in range(2,11)]\n", "color_stops = create_color_stops(color_breaks, colors='PuRd')\n", "data = json.loads(data.to_json(orient='records'))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Create the viz\n", "viz = ChoroplethViz(data, \n", " access_token=token,\n", " vector_url='mapbox://rsbaumann.bv2k1pl2',\n", " vector_layer_name='2016_us_census_postcode',\n", " vector_join_property='postcode',\n", " data_join_property=dimension,\n", " color_property=measure,\n", " color_stops=color_stops,\n", " line_color = 'rgba(0,0,0,0.05)',\n", " line_width = 0.5,\n", " opacity=0.7,\n", " center=(-95, 45),\n", " zoom=2,\n", " below_layer='waterway-label',\n", " legend_key_shape='contiguous-bar')\n", "viz.show()" ] } ], "metadata": { "anaconda-cloud": { "attach-environment": true, "environment": "Root", "summary": "Mapboxgl Python Data Visualization example" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }