{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simple data visualization: the bar chart" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook we'll be comparing as many Python visualization libraries as possible with one simple metric: how easy is it to make a bar chart? We'll also look a bit into customization with each library, and explore the pain points a bit. \n", "\n", "_Note: if you're viewing this on GitHub, charting libraries that output Javascript (Bokeh, Holoviews, Altair) won't display. Try viewing the notebook on [my nbviewer page](http://nbviewer.jupyter.org/github/dovinmu/python-viz-notebooks/tree/master/) instead._\n", "\n", "First, let's load a pandas DataFrame of the data we'll be using and clean it a bit. There's a CSV in the repository that lists over 4,000 cities and towns in the United States. For now, let's just take the cities that are over a certain size and plop that into various charting libraries. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Population</th>\n", " </tr>\n", " <tr>\n", " <th>Name</th>\n", " <th></th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>Tucson</th>\n", " <td>0.518907</td>\n", " </tr>\n", " <tr>\n", " <th>Nashville</th>\n", " <td>0.530852</td>\n", " </tr>\n", " <tr>\n", " <th>Oklahoma City</th>\n", " <td>0.532950</td>\n", " </tr>\n", " <tr>\n", " <th>Las Vegas</th>\n", " <td>0.540111</td>\n", " </tr>\n", " <tr>\n", " <th>Portland</th>\n", " <td>0.540513</td>\n", " </tr>\n", " <tr>\n", " <th>Washington</th>\n", " <td>0.552433</td>\n", " </tr>\n", " <tr>\n", " <th>Denver</th>\n", " <td>0.555981</td>\n", " </tr>\n", " <tr>\n", " <th>Seattle</th>\n", " <td>0.569369</td>\n", " </tr>\n", " <tr>\n", " <th>Boston</th>\n", " <td>0.571281</td>\n", " </tr>\n", " <tr>\n", " <th>Milwaukee</th>\n", " <td>0.579180</td>\n", " </tr>\n", " <tr>\n", " <th>El Paso</th>\n", " <td>0.597181</td>\n", " </tr>\n", " <tr>\n", " <th>Charlotte</th>\n", " <td>0.598351</td>\n", " </tr>\n", " <tr>\n", " <th>Baltimore</th>\n", " <td>0.610892</td>\n", " </tr>\n", " <tr>\n", " <th>Fort Worth</th>\n", " <td>0.618119</td>\n", " </tr>\n", " <tr>\n", " <th>Memphis</th>\n", " <td>0.641608</td>\n", " </tr>\n", " <tr>\n", " <th>Austin</th>\n", " <td>0.678368</td>\n", " </tr>\n", " <tr>\n", " <th>San Francisco</th>\n", " <td>0.732072</td>\n", " </tr>\n", " <tr>\n", " <th>Columbus</th>\n", " <td>0.736836</td>\n", " </tr>\n", " <tr>\n", " <th>Indianapolis</th>\n", " <td>0.773283</td>\n", " </tr>\n", " <tr>\n", " <th>Jacksonville</th>\n", " <td>0.797557</td>\n", " </tr>\n", " <tr>\n", " <th>Detroit</th>\n", " <td>0.884941</td>\n", " </tr>\n", " <tr>\n", " <th>San Jose</th>\n", " <td>0.897460</td>\n", " </tr>\n", " <tr>\n", " <th>Dallas</th>\n", " <td>1.211704</td>\n", " </tr>\n", " <tr>\n", " <th>San Antonio</th>\n", " <td>1.256810</td>\n", " </tr>\n", " <tr>\n", " <th>San Diego</th>\n", " <td>1.287050</td>\n", " </tr>\n", " <tr>\n", " <th>Phoenix</th>\n", " <td>1.428509</td>\n", " </tr>\n", " <tr>\n", " <th>Philadelphia</th>\n", " <td>1.453268</td>\n", " </tr>\n", " <tr>\n", " <th>Houston</th>\n", " <td>2.027712</td>\n", " </tr>\n", " <tr>\n", " <th>Chicago</th>\n", " <td>2.841952</td>\n", " </tr>\n", " <tr>\n", " <th>Los Angeles</th>\n", " <td>3.877129</td>\n", " </tr>\n", " <tr>\n", " <th>New York</th>\n", " <td>8.107916</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Population\n", "Name \n", "Tucson 0.518907\n", "Nashville 0.530852\n", "Oklahoma City 0.532950\n", "Las Vegas 0.540111\n", "Portland 0.540513\n", "Washington 0.552433\n", "Denver 0.555981\n", "Seattle 0.569369\n", "Boston 0.571281\n", "Milwaukee 0.579180\n", "El Paso 0.597181\n", "Charlotte 0.598351\n", "Baltimore 0.610892\n", "Fort Worth 0.618119\n", "Memphis 0.641608\n", "Austin 0.678368\n", "San Francisco 0.732072\n", "Columbus 0.736836\n", "Indianapolis 0.773283\n", "Jacksonville 0.797557\n", "Detroit 0.884941\n", "San Jose 0.897460\n", "Dallas 1.211704\n", "San Antonio 1.256810\n", "San Diego 1.287050\n", "Phoenix 1.428509\n", "Philadelphia 1.453268\n", "Houston 2.027712\n", "Chicago 2.841952\n", "Los Angeles 3.877129\n", "New York 8.107916" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas\n", "%matplotlib inline\n", "\n", "df = pandas.read_csv('data/US_cities.csv', index_col=\"AccentCity\")\n", "# select cities with a population greater than 750,000 and convert units to millions\n", "large_cities = df[df[\"Population\"] > 500000][[\"Population\"]] / 1000000\n", "# sort the list by population\n", "large_cities.sort_values(\"Population\", inplace=True)\n", "# we don't care about all the other data, so discard everything but the population\n", "large_cities_ser = large_cities[\"Population\"]\n", "# also don't care about the name of the cities column in the CSV\n", "large_cities_ser.index.name = \"Name\"\n", "\n", "large_cities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll represent the population in the millions to make it so we don't have to fiddle with the y-axis of our plots. \n", "\n", "### Matplotlib\n", "Matplotlib is both amazingly versatile, and also generally more verbose than the other packages below (which usually will use it as a backend rendering target for static graphs). You need to manually specify a few things that other packages just handle." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Tucson', 'Nashville', 'Oklahoma City', 'Las Vegas', 'Portland',\n", " 'Washington', 'Denver', 'Seattle', 'Boston', 'Milwaukee', 'El Paso',\n", " 'Charlotte', 'Baltimore', 'Fort Worth', 'Memphis', 'Austin',\n", " 'San Francisco', 'Columbus', 'Indianapolis', 'Jacksonville', 'Detroit',\n", " 'San Jose', 'Dallas', 'San Antonio', 'San Diego', 'Phoenix',\n", " 'Philadelphia', 'Houston', 'Chicago', 'Los Angeles', 'New York'],\n", " dtype='object', name='Name')" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "large_cities.index" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Population (m)')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# manually tell matplotlib where the bars will go, so we'll space them out every 10 pixels\n", "left = [i * 10 for i in range(len(large_cities))]\n", "cities = list(large_cities.values)\n", "plt.bar(left, large_cities.Population, width=5, \n", " tick_label=large_cities.index)\n", "# make the city names vertical so we can read them\n", "plt.xticks(rotation=\"vertical\")\n", "plt.ylabel(\"Population (m)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we get this decent-looking bar chart." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pandas + Matplotlib" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas is what we loaded the data in with, and it has plotting functions that use matplotlib as the backend but are aware of how your dataframe is structured. This is all we need to do to make an almost identical chart as the one above." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.axes._subplots.AxesSubplot at 0x2229e9cc978>" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAFJCAYAAAC7C8cBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXm4HFW1t99fwhDmMXoVCAFlklki8+wsgoJwGWUQBLzKoFdxFtBPZFBEUcQ4xFxEVEBAQBBE5tGEBAgCihAwTgQERCNCYH1/rF051dVV3dUnp885Bet9nn7O6epVu3Z1V63ae+01yMwIgiAImsOYke5AEARB0BuhuIMgCBpGKO4gCIKGEYo7CIKgYYTiDoIgaBihuIMgCBpGKO4gCIKGEYo7CIKgYYTiDoIgaBiL9KPRlVde2SZOnNiPpoMgCF6STJ8+/XEzG19Hti+Ke+LEiUybNq0fTQdBELwkkfRIXdkwlQRBEDSMUNxBEAQNIxR3EARBw+iLjbuM559/njlz5vDss88O1yFfNowbN45VV12VRRdddKS7EgTBMDBsinvOnDkss8wyTJw4EUnDddiXPGbGE088wZw5c1hjjTVGujtBEAwDw2YqefbZZ1lppZVCaQ8xklhppZViJhMELyOG1cYdSrs/xPcaBC8vYnEyCIKgYdSycUv6MHAYYMA9wCFmtlBz84mfuHxhdm9j9sm7dJUZO3YsG264IfPnz2e99dZj6tSpLLnkkkPWhx/84AdMmzaNb3zjG5Uy1113HYstthhbb701AGeffTZLLrkkBx544JD1IwiC0UeVzquju4p0HXFLWgU4GphkZhsAY4F9ej7SKGCJJZZg5syZzJo1i8UWW4yzzz572Ptw3XXXccsttyx4f+SRR4bSDoKgJ+qaShYBlpC0CLAk8Of+dWl42G677XjwwQcBOP3009lggw3YYIMNOOOMMwCYPXs26667LgcddBAbbbQRe+65J/PmzQM8pP/xxx8HYNq0aey4445t7V966aVsscUWbLrpprzpTW/ib3/7G7Nnz+bss8/mq1/9Kptssgk33ngjJ5xwAl/+8pcBmDlzJltuuSUbbbQRu+++O08++SQAO+64Ix//+MfZfPPNWXvttbnxxhv7/fUEQTCK6aq4zexPwJeBR4G/AE+b2VVFOUmHS5omadrcuXOHvqdDyPz587niiivYcMMNmT59OlOmTOH222/ntttu4zvf+Q4zZswA4IEHHuDwww/n7rvvZtlll+Wss86qfYxtt92W2267jRkzZrDPPvtw6qmnMnHiRI488kg+/OEPM3PmTLbbbruWfQ488EBOOeUU7r77bjbccENOPPHElj7fcccdnHHGGS3bgyB4+VHHVLIC8C5gDeDVwFKSDijKmdlkM5tkZpPGj6+V4GrY+fe//80mm2zCpEmTmDBhAoceeig33XQTu+++O0sttRRLL700e+yxx4IR7WqrrcY222wDwAEHHMBNN91U+1hz5szhrW99KxtuuCGnnXYa9957b0f5p59+mqeeeooddtgBgIMOOogbbrhhwed77LEHAJttthmzZ8/u5bSDIHiJUWdx8k3Aw2Y2F0DSz4CtgR/2s2P9ILNx5zGzSvmim132fpFFFuHFF18EqPSfPuqoo/jIRz7CbrvtxnXXXccJJ5ywED2HxRdfHPAF1vnz5y9UW0EQNJs6Nu5HgS0lLSnXXG8E7utvt4aP7bffnosvvph58+bxr3/9i4suumiBCePRRx/l1ltvBeC8885j2223BdzGPX36dAAuvPDC0naffvppVlllFQCmTp26YPsyyyzDM8880ya/3HLLscIKKywY7Z9zzjkLRt9BEAR5uo64zex2SRcAdwLzgRnA5IU98GBcYPrB61//eg4++GA233xzAA477DA23XRTZs+evcBl8IgjjmCttdbiAx/4AADHH388hx56KCeddBJbbLFFabsnnHACe+21F6ussgpbbrklDz/8MAC77rore+65J5dccglnnnlmyz5Tp07lyCOPZN68eay55ppMmTKlj2ceBEFTUSdTwWCZNGmSFQsp3Hfffay33npDfqx+MXv2bN75zncya9aske5KLZr2/QbBy41uftySppvZpDptReRkEARBwwjFXcHEiRMbM9oOguDlxbAq7n6YZYL4XoPg5cawKe5x48bxxBNPhJIZYrJ83OPGjRvprgRBMEwMWyGFVVddlTlz5jDaoyqbSFYBJwiClwfDprgXXXTRqNASBEEwBMTiZBAEQcMIxR0EQdAwQnEHQRA0jFDcQRAEDSMUdxAEQcMIxR0EQdAwQnEHQRA0jFDcQRAEDSMUdxAEQcMIxR0EQdAw6hQLXkfSzNzrH5KOHY7OBUEQBO3UKV32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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "large_cities.plot.bar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because pandas is plotting to matplotlib on the backend, you can still tweak it with commands directly to matplotlib like in the second line above. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Seaborn" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Population (m)')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn\n", "seaborn.barplot(x=large_cities.index, y=large_cities.Population)\n", "plt.xticks(rotation=\"vertical\")\n", "plt.ylabel(\"Population (m)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bokeh\n", "\n", "Here's how to make a bar chart similar to the ones above in Bokeh." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " <div class=\"bk-root\">\n", " <a href=\"https://bokeh.pydata.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n", " <span id=\"c58c56fb-8535-4277-b460-988cbcd9fe0e\">Loading BokehJS ...</span>\n", " </div>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", "\n", " if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n", " root._bokeh_onload_callbacks = [];\n", " root._bokeh_is_loading = undefined;\n", " }\n", "\n", " var JS_MIME_TYPE = 'application/javascript';\n", " var HTML_MIME_TYPE = 'text/html';\n", " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " var CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " var script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " var cell = handle.cell;\n", "\n", " var id = cell.output_area._bokeh_element_id;\n", " var server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id != null && id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd, {\n", " iopub: {\n", " output: function(msg) {\n", " var id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " }\n", "\n", " \n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " var NB_LOAD_WARNING = {'data': {'text/html':\n", " \"<div style='background-color: #fdd'>\\n\"+\n", " \"<p>\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"</p>\\n\"+\n", " \"<ul>\\n\"+\n", " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n", " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n", " \"</ul>\\n\"+\n", " \"<code>\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"</code>\\n\"+\n", " \"</div>\"}};\n", "\n", " function display_loaded() {\n", " var el = document.getElementById(\"c58c56fb-8535-4277-b460-988cbcd9fe0e\");\n", " if (el != null) {\n", " el.textContent = \"BokehJS is loading...\";\n", " }\n", " if (root.Bokeh !== undefined) {\n", " if (el != null) {\n", " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " }\n", " finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };var element = document.getElementById(\"c58c56fb-8535-4277-b460-988cbcd9fe0e\");\n", " if (element == null) {\n", " console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'c58c56fb-8535-4277-b460-988cbcd9fe0e' but no matching script tag was found. \")\n", " return false;\n", " }\n", "\n", " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.13.0.min.js\"];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " \n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if ((root.Bokeh !== undefined) || (force === true)) {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }if (force === true) {\n", " display_loaded();\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " var cell = $(document.getElementById(\"c58c56fb-8535-4277-b460-988cbcd9fe0e\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", "\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"c58c56fb-8535-4277-b460-988cbcd9fe0e\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"c58c56fb-8535-4277-b460-988cbcd9fe0e\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid 'c58c56fb-8535-4277-b460-988cbcd9fe0e' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.13.0.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.13.0.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.13.0.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.13.0.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"c58c56fb-8535-4277-b460-988cbcd9fe0e\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", " <div class=\"bk-root\" id=\"9e46c284-79df-4cdd-9ed1-fde9f3a5400e\"></div>\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"f791b720-c585-4691-a600-351b81ab3e7b\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"83520a12-500f-4cdc-baae-817112a1180e\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"ca78befc-b2b5-46b6-88a6-1690e9fd0328\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"below\":[{\"id\":\"4209b941-f9c1-4f66-83b3-eaba05214433\",\"type\":\"CategoricalAxis\"}],\"left\":[{\"id\":\"f163c28f-39e1-4d5e-8732-e1b1d7c67530\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"4209b941-f9c1-4f66-83b3-eaba05214433\",\"type\":\"CategoricalAxis\"},{\"id\":\"88704a62-821a-4d08-9ee8-7fb421cd4b0e\",\"type\":\"Grid\"},{\"id\":\"f163c28f-39e1-4d5e-8732-e1b1d7c67530\",\"type\":\"LinearAxis\"},{\"id\":\"51562eca-df58-4ce6-bffb-cabca25366cb\",\"type\":\"Grid\"},{\"id\":\"d7158c01-d912-44fa-888c-2611feb2c63a\",\"type\":\"BoxAnnotation\"},{\"id\":\"d74297d3-e4d6-410f-81e3-fc6eb87de407\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"7081d597-34f5-4c71-955f-fd63c11212a9\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"4d3261c2-61f3-4293-bb61-dfc2cb76066b\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"3c93e7a6-cec7-4467-a31d-3622cc7519ac\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"8a1caf57-5c91-401f-b835-cd9a66f349a8\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"bb1c0b23-b1cb-42b2-bf6e-6c3dd862959c\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"29ddf635-8375-482a-b4d5-4dcc7ffbca4d\",\"type\":\"LinearScale\"}},\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"data\":{\"Name\":[\"Tucson\",\"Nashville\",\"Oklahoma City\",\"Las Vegas\",\"Portland\",\"Washington\",\"Denver\",\"Seattle\",\"Boston\",\"Milwaukee\",\"El Paso\",\"Charlotte\",\"Baltimore\",\"Fort Worth\",\"Memphis\",\"Austin\",\"San Francisco\",\"Columbus\",\"Indianapolis\",\"Jacksonville\",\"Detroit\",\"San Jose\",\"Dallas\",\"San Antonio\",\"San Diego\",\"Phoenix\",\"Philadelphia\",\"Houston\",\"Chicago\",\"Los Angeles\",\"New York\"],\"Population\":{\"__ndarray__\":\"jEtV2uKa4D+lhGBVvfzgPwTnjCjtDeE/JLcm3ZZI4T/aAkLr4UvhP7plh/iHreE/51CGqpjK4T8wZktWRTjiPwlwehfvR+I/uOnPfqSI4j/IXBlUGxzjP7fsEP+wJeM/wmosYW2M4z+/KEF/ocfjP1JDG4ANiOQ/yeTUzjC15T9rJ0pCIm3nP55+UBcplOc/R7Bx/bu+6D+VRPZBloXpPxR3vMlvUew/K/uuCP637D8L68a7I2PzP3mSdM3kG/Q/nRGlvcGX9D+oqtBALNv2P1osRfKVQPc/bqetEcE4AEASaoZUUbwGQEj8ijVcBA9AJm4VxEA3IEA=\",\"dtype\":\"float64\",\"shape\":[31]}},\"selected\":{\"id\":\"f268d6ea-47f3-4d21-a597-0f24bdfac2d9\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"83520a12-500f-4cdc-baae-817112a1180e\",\"type\":\"UnionRenderers\"}},\"id\":\"b9bcf2eb-f8fe-4c15-873c-aec6a1d4d179\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"d7158c01-d912-44fa-888c-2611feb2c63a\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"4c668a59-7fed-4944-b946-11c3e43b5c30\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"3a829cc9-3c46-4739-9568-c156cf7c29f9\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"callback\":null,\"factors\":[\"Tucson\",\"Nashville\",\"Oklahoma City\",\"Las Vegas\",\"Portland\",\"Washington\",\"Denver\",\"Seattle\",\"Boston\",\"Milwaukee\",\"El Paso\",\"Charlotte\",\"Baltimore\",\"Fort Worth\",\"Memphis\",\"Austin\",\"San Francisco\",\"Columbus\",\"Indianapolis\",\"Jacksonville\",\"Detroit\",\"San Jose\",\"Dallas\",\"San Antonio\",\"San Diego\",\"Phoenix\",\"Philadelphia\",\"Houston\",\"Chicago\",\"Los Angeles\",\"New York\"]},\"id\":\"3c93e7a6-cec7-4467-a31d-3622cc7519ac\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"3e015455-c96d-4f4b-9291-b2cf667fc224\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"b9bcf2eb-f8fe-4c15-873c-aec6a1d4d179\",\"type\":\"ColumnDataSource\"}},\"id\":\"b8b9bab9-002c-4611-8a40-19bc19e66471\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"7081d597-34f5-4c71-955f-fd63c11212a9\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"d7158c01-d912-44fa-888c-2611feb2c63a\",\"type\":\"BoxAnnotation\"}},\"id\":\"e360dffc-ab76-4f16-9043-64915ba294ec\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null},\"id\":\"bb1c0b23-b1cb-42b2-bf6e-6c3dd862959c\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"b9bcf2eb-f8fe-4c15-873c-aec6a1d4d179\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ef631f27-93e7-499d-97d7-709456adfb86\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"100d60cf-fb60-4bf6-a2b1-1a14fdc45c67\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"b8b9bab9-002c-4611-8a40-19bc19e66471\",\"type\":\"CDSView\"}},\"id\":\"d74297d3-e4d6-410f-81e3-fc6eb87de407\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"8a1caf57-5c91-401f-b835-cd9a66f349a8\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"29ddf635-8375-482a-b4d5-4dcc7ffbca4d\",\"type\":\"LinearScale\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"4c668a59-7fed-4944-b946-11c3e43b5c30\",\"type\":\"PanTool\"},{\"id\":\"3e015455-c96d-4f4b-9291-b2cf667fc224\",\"type\":\"WheelZoomTool\"},{\"id\":\"e360dffc-ab76-4f16-9043-64915ba294ec\",\"type\":\"BoxZoomTool\"},{\"id\":\"22dde006-c5f4-4709-9c48-b45d6282ef88\",\"type\":\"SaveTool\"},{\"id\":\"c49e205d-4f74-47cb-bb8b-e83cb0a33b62\",\"type\":\"ResetTool\"},{\"id\":\"a5ccbf53-4c56-4e0d-ad89-55c6b6738f42\",\"type\":\"HelpTool\"}]},\"id\":\"4d3261c2-61f3-4293-bb61-dfc2cb76066b\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"22dde006-c5f4-4709-9c48-b45d6282ef88\",\"type\":\"SaveTool\"},{\"attributes\":{\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ca78befc-b2b5-46b6-88a6-1690e9fd0328\",\"type\":\"CategoricalTicker\"}},\"id\":\"88704a62-821a-4d08-9ee8-7fb421cd4b0e\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"c49e205d-4f74-47cb-bb8b-e83cb0a33b62\",\"type\":\"ResetTool\"},{\"attributes\":{\"formatter\":{\"id\":\"3a829cc9-3c46-4739-9568-c156cf7c29f9\",\"type\":\"CategoricalTickFormatter\"},\"major_label_orientation\":\"vertical\",\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ca78befc-b2b5-46b6-88a6-1690e9fd0328\",\"type\":\"CategoricalTicker\"}},\"id\":\"4209b941-f9c1-4f66-83b3-eaba05214433\",\"type\":\"CategoricalAxis\"},{\"attributes\":{},\"id\":\"a5ccbf53-4c56-4e0d-ad89-55c6b6738f42\",\"type\":\"HelpTool\"},{\"attributes\":{\"formatter\":{\"id\":\"41a46293-944b-4324-a788-22e9bd4e3e30\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"bdf2e82d-5935-410a-8b89-7a2803b74865\",\"type\":\"BasicTicker\"}},\"id\":\"f163c28f-39e1-4d5e-8732-e1b1d7c67530\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"Population\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"Name\"}},\"id\":\"100d60cf-fb60-4bf6-a2b1-1a14fdc45c67\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"41a46293-944b-4324-a788-22e9bd4e3e30\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"white\"},\"top\":{\"field\":\"Population\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"Name\"}},\"id\":\"ef631f27-93e7-499d-97d7-709456adfb86\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"bdf2e82d-5935-410a-8b89-7a2803b74865\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"bdf2e82d-5935-410a-8b89-7a2803b74865\",\"type\":\"BasicTicker\"}},\"id\":\"51562eca-df58-4ce6-bffb-cabca25366cb\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"f268d6ea-47f3-4d21-a597-0f24bdfac2d9\",\"type\":\"Selection\"}],\"root_ids\":[\"ee79483a-f543-4c0c-9afa-9b0602d39753\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", " var render_items = [{\"docid\":\"f791b720-c585-4691-a600-351b81ab3e7b\",\"roots\":{\"ee79483a-f543-4c0c-9afa-9b0602d39753\":\"9e46c284-79df-4cdd-9ed1-fde9f3a5400e\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "ee79483a-f543-4c0c-9afa-9b0602d39753" } }, "output_type": "display_data" } ], "source": [ "from bokeh.io import show, output_notebook\n", "from bokeh.plotting import figure\n", "\n", "output_notebook()\n", "\n", "p = figure(x_range=list(large_cities.index), toolbar_location=None)\n", "p.vbar(x='Name', top='Population', width=0.9, source=large_cities, \n", " line_color='white')\n", "p.xaxis.major_label_orientation = \"vertical\"\n", "\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we want the labels to be oriented the same way as we got above, we can do a neat trick by manually specifying the rotation. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", " <div class=\"bk-root\" id=\"4005dc31-f772-4c55-8567-ed0245595744\"></div>\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"77dba9f7-e7b5-4f76-9d01-08d208269dd3\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"83520a12-500f-4cdc-baae-817112a1180e\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"ca78befc-b2b5-46b6-88a6-1690e9fd0328\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"below\":[{\"id\":\"4209b941-f9c1-4f66-83b3-eaba05214433\",\"type\":\"CategoricalAxis\"}],\"left\":[{\"id\":\"f163c28f-39e1-4d5e-8732-e1b1d7c67530\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"4209b941-f9c1-4f66-83b3-eaba05214433\",\"type\":\"CategoricalAxis\"},{\"id\":\"88704a62-821a-4d08-9ee8-7fb421cd4b0e\",\"type\":\"Grid\"},{\"id\":\"f163c28f-39e1-4d5e-8732-e1b1d7c67530\",\"type\":\"LinearAxis\"},{\"id\":\"51562eca-df58-4ce6-bffb-cabca25366cb\",\"type\":\"Grid\"},{\"id\":\"d7158c01-d912-44fa-888c-2611feb2c63a\",\"type\":\"BoxAnnotation\"},{\"id\":\"d74297d3-e4d6-410f-81e3-fc6eb87de407\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"7081d597-34f5-4c71-955f-fd63c11212a9\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"4d3261c2-61f3-4293-bb61-dfc2cb76066b\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"3c93e7a6-cec7-4467-a31d-3622cc7519ac\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"8a1caf57-5c91-401f-b835-cd9a66f349a8\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"bb1c0b23-b1cb-42b2-bf6e-6c3dd862959c\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"29ddf635-8375-482a-b4d5-4dcc7ffbca4d\",\"type\":\"LinearScale\"}},\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"data\":{\"Name\":[\"Tucson\",\"Nashville\",\"Oklahoma City\",\"Las Vegas\",\"Portland\",\"Washington\",\"Denver\",\"Seattle\",\"Boston\",\"Milwaukee\",\"El Paso\",\"Charlotte\",\"Baltimore\",\"Fort Worth\",\"Memphis\",\"Austin\",\"San Francisco\",\"Columbus\",\"Indianapolis\",\"Jacksonville\",\"Detroit\",\"San Jose\",\"Dallas\",\"San Antonio\",\"San Diego\",\"Phoenix\",\"Philadelphia\",\"Houston\",\"Chicago\",\"Los Angeles\",\"New York\"],\"Population\":{\"__ndarray__\":\"jEtV2uKa4D+lhGBVvfzgPwTnjCjtDeE/JLcm3ZZI4T/aAkLr4UvhP7plh/iHreE/51CGqpjK4T8wZktWRTjiPwlwehfvR+I/uOnPfqSI4j/IXBlUGxzjP7fsEP+wJeM/wmosYW2M4z+/KEF/ocfjP1JDG4ANiOQ/yeTUzjC15T9rJ0pCIm3nP55+UBcplOc/R7Bx/bu+6D+VRPZBloXpPxR3vMlvUew/K/uuCP637D8L68a7I2PzP3mSdM3kG/Q/nRGlvcGX9D+oqtBALNv2P1osRfKVQPc/bqetEcE4AEASaoZUUbwGQEj8ijVcBA9AJm4VxEA3IEA=\",\"dtype\":\"float64\",\"shape\":[31]}},\"selected\":{\"id\":\"f268d6ea-47f3-4d21-a597-0f24bdfac2d9\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"83520a12-500f-4cdc-baae-817112a1180e\",\"type\":\"UnionRenderers\"}},\"id\":\"b9bcf2eb-f8fe-4c15-873c-aec6a1d4d179\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"d7158c01-d912-44fa-888c-2611feb2c63a\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"4c668a59-7fed-4944-b946-11c3e43b5c30\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"3a829cc9-3c46-4739-9568-c156cf7c29f9\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"callback\":null,\"factors\":[\"Tucson\",\"Nashville\",\"Oklahoma City\",\"Las Vegas\",\"Portland\",\"Washington\",\"Denver\",\"Seattle\",\"Boston\",\"Milwaukee\",\"El Paso\",\"Charlotte\",\"Baltimore\",\"Fort Worth\",\"Memphis\",\"Austin\",\"San Francisco\",\"Columbus\",\"Indianapolis\",\"Jacksonville\",\"Detroit\",\"San Jose\",\"Dallas\",\"San Antonio\",\"San Diego\",\"Phoenix\",\"Philadelphia\",\"Houston\",\"Chicago\",\"Los Angeles\",\"New York\"]},\"id\":\"3c93e7a6-cec7-4467-a31d-3622cc7519ac\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"3e015455-c96d-4f4b-9291-b2cf667fc224\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"b9bcf2eb-f8fe-4c15-873c-aec6a1d4d179\",\"type\":\"ColumnDataSource\"}},\"id\":\"b8b9bab9-002c-4611-8a40-19bc19e66471\",\"type\":\"CDSView\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"7081d597-34f5-4c71-955f-fd63c11212a9\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"d7158c01-d912-44fa-888c-2611feb2c63a\",\"type\":\"BoxAnnotation\"}},\"id\":\"e360dffc-ab76-4f16-9043-64915ba294ec\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null},\"id\":\"bb1c0b23-b1cb-42b2-bf6e-6c3dd862959c\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"b9bcf2eb-f8fe-4c15-873c-aec6a1d4d179\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ef631f27-93e7-499d-97d7-709456adfb86\",\"type\":\"VBar\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"100d60cf-fb60-4bf6-a2b1-1a14fdc45c67\",\"type\":\"VBar\"},\"selection_glyph\":null,\"view\":{\"id\":\"b8b9bab9-002c-4611-8a40-19bc19e66471\",\"type\":\"CDSView\"}},\"id\":\"d74297d3-e4d6-410f-81e3-fc6eb87de407\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"8a1caf57-5c91-401f-b835-cd9a66f349a8\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"29ddf635-8375-482a-b4d5-4dcc7ffbca4d\",\"type\":\"LinearScale\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"4c668a59-7fed-4944-b946-11c3e43b5c30\",\"type\":\"PanTool\"},{\"id\":\"3e015455-c96d-4f4b-9291-b2cf667fc224\",\"type\":\"WheelZoomTool\"},{\"id\":\"e360dffc-ab76-4f16-9043-64915ba294ec\",\"type\":\"BoxZoomTool\"},{\"id\":\"22dde006-c5f4-4709-9c48-b45d6282ef88\",\"type\":\"SaveTool\"},{\"id\":\"c49e205d-4f74-47cb-bb8b-e83cb0a33b62\",\"type\":\"ResetTool\"},{\"id\":\"a5ccbf53-4c56-4e0d-ad89-55c6b6738f42\",\"type\":\"HelpTool\"}]},\"id\":\"4d3261c2-61f3-4293-bb61-dfc2cb76066b\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"22dde006-c5f4-4709-9c48-b45d6282ef88\",\"type\":\"SaveTool\"},{\"attributes\":{\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ca78befc-b2b5-46b6-88a6-1690e9fd0328\",\"type\":\"CategoricalTicker\"}},\"id\":\"88704a62-821a-4d08-9ee8-7fb421cd4b0e\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"c49e205d-4f74-47cb-bb8b-e83cb0a33b62\",\"type\":\"ResetTool\"},{\"attributes\":{\"formatter\":{\"id\":\"3a829cc9-3c46-4739-9568-c156cf7c29f9\",\"type\":\"CategoricalTickFormatter\"},\"major_label_orientation\":1.570795,\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ca78befc-b2b5-46b6-88a6-1690e9fd0328\",\"type\":\"CategoricalTicker\"}},\"id\":\"4209b941-f9c1-4f66-83b3-eaba05214433\",\"type\":\"CategoricalAxis\"},{\"attributes\":{},\"id\":\"a5ccbf53-4c56-4e0d-ad89-55c6b6738f42\",\"type\":\"HelpTool\"},{\"attributes\":{\"formatter\":{\"id\":\"41a46293-944b-4324-a788-22e9bd4e3e30\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"bdf2e82d-5935-410a-8b89-7a2803b74865\",\"type\":\"BasicTicker\"}},\"id\":\"f163c28f-39e1-4d5e-8732-e1b1d7c67530\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"Population\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"Name\"}},\"id\":\"100d60cf-fb60-4bf6-a2b1-1a14fdc45c67\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"41a46293-944b-4324-a788-22e9bd4e3e30\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"white\"},\"top\":{\"field\":\"Population\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"Name\"}},\"id\":\"ef631f27-93e7-499d-97d7-709456adfb86\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"bdf2e82d-5935-410a-8b89-7a2803b74865\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"ee79483a-f543-4c0c-9afa-9b0602d39753\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"bdf2e82d-5935-410a-8b89-7a2803b74865\",\"type\":\"BasicTicker\"}},\"id\":\"51562eca-df58-4ce6-bffb-cabca25366cb\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"f268d6ea-47f3-4d21-a597-0f24bdfac2d9\",\"type\":\"Selection\"}],\"root_ids\":[\"ee79483a-f543-4c0c-9afa-9b0602d39753\"]},\"title\":\"Bokeh Application\",\"version\":\"0.13.0\"}};\n", " var render_items = [{\"docid\":\"77dba9f7-e7b5-4f76-9d01-08d208269dd3\",\"roots\":{\"ee79483a-f543-4c0c-9afa-9b0602d39753\":\"4005dc31-f772-4c55-8567-ed0245595744\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\")\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "ee79483a-f543-4c0c-9afa-9b0602d39753" } }, "output_type": "display_data" } ], "source": [ "p.xaxis.major_label_orientation = 3.14159 / 2\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thanks for reading!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References\n", "\n", "Bokeh bar chart: http://bokeh.pydata.org/en/latest/docs/gallery/bar_colormapped.html\n", "\n", "Thanks to @bryevdv for dropping some knowledge about how to use Bokeh better." ] } ], "metadata": { "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.6" } }, "nbformat": 4, "nbformat_minor": 2 }