{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Notebook for Building a bullet chart in python.\n", "Full article posted in http://pbpython.com/bullet-graph.html" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from matplotlib.ticker import FuncFormatter" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Show examples of using seaborn's palette functionality" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAABLCAYAAADK+7ojAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAAdxJREFUeJzt2yFOZEEUhtFbExTYQSEwiHEIek29DtbBRtgBIMDNAkBh\nkCDAFAbf3ZBK9f84x72k0rk3L/mS6uS13nsBJPgzewCAbQkWEEOwgBiCBcQQLCCGYAExBAuIIVhA\nDMECYhxsOtBaW1fVuqrq8Ojw4uzf2fChZnn9eJ09wlBv72+zRxjGuwv3XC+99+NNx9oun+acr877\n9f31j+baZzePN7NHGOr28Xb2CMMs/d3dPd3NHmGsy3rova82HXMlBGIIFhBDsIAYggXEECwghmAB\nMQQLiCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQLiCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQL\niCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQLiCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQLiCFY\nQAzBAmIIFhBDsIAYggXEECwghmABMQQLiCFYQAzBAmIIFhBDsIAYggXEONh0oLW2rqr11+P7STv5\nP3akqf5W1cvsIQZZ8m5V9kt3us2h1nvf+hdba/e999W3R9pzS95vybtV2e+3cCUEYggWEGPXYF0N\nmWJ/LHm/Je9WZb9fYaf/sABmciUEYggWEEOwgBiCBcQQLCDGJ+/STn+Tfe1CAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.palplot(sns.light_palette(\"green\", 5))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAABLCAYAAADK+7ojAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAAdFJREFUeJzt2yFOQ0EUhtE7pAosqAoMAoega+qi2Ag7KAhwLAMJAjUY\nfFvIZPo/znEvmTT35iVfMk1e670XQIKz2QMAHEqwgBiCBcQQLCCGYAExBAuIIVhADMECYggWEGO1\n70BrbVtV26qqi/Pz+9ubm+FDTfPxMXuCsT4/Z08wjncX7bXqvfd+te9cO+bTnM3dXX95fPzTYCdt\nt5s9wVhPT7MnGGfp7+75efYEQ7Wq1977Zt85V0IghmABMQQLiCFYQAzBAmIIFhBDsIAYggXEECwg\nhmABMQQLiCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQLiCFYQAzBAmIIFhBDsIAYggXEECwghmAB\nMQQLiCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQLiCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQL\niCFYQAzBAmIIFhBDsIAYggXEECwghmABMQQLiCFYQIzVvgOttW1VbX8ev9p6/TZ2pKkuq+p99hCD\nLHm3Kvuluz7kUOu9H/yLrbWX3vvm1yOduCXvt+Tdquz3X7gSAjEEC4hxbLAehkxxOpa835J3q7Lf\nv3DUf1gAM7kSAjEEC4ghWEAMwQJiCBYQ4xvG9UZ/QoKjOwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.palplot(sns.light_palette(\"red\", 5))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAABLCAYAAAArvG03AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAAjNJREFUeJzt3DFqG1EUheH7YtmpLSmNm9ip00WbyEbkPWVNagJZgCGt\nyBZemjTGkIlyGEbz+L7OMMU9ls0PY3DrvRcA8P/eLX0AAKydmAJASEwBICSmABASUwAIiSkAhMQU\nAEJiCgAhMQWA0GbqgdbasaqOVVW3dftlX/vZj1rK5m7y27Fqm/dj77u5u1n6hNmM/tmNvm/kn82q\nsT+/l58vdf51blPPtUv+neBDe+jP9Rwdds3uH++XPmFWu6fd0ifMavu0XfqE2Yy8rapq+zj2vt2n\nwX/3Bv78Dl8Pdfp+moyp17wAEBJTAAiJKQCExBQAQmIKACExBYCQmAJASEwBICSmABASUwAIiSkA\nhMQUAEJiCgAhMQWAkJgCQEhMASAkpgAQElMACIkpAITEFABCYgoAITEFgJCYAkBITAEgJKYAEBJT\nAAiJKQCExBQAQmIKACExBYCQmAJASEwBICSmABASUwAIiSkAhMQUAEJiCgAhMQWAkJgCQEhMASAk\npgAQElMACIkpAITEFABCYgoAITEFgJCYAkBITAEgJKYAEBJTAAiJKQCExBQAQq33/vcHWjtW1fHP\nl5+r6sfcRy1oX1XnpY+YycjbquxbO/vWa+RtVVUfe+8fph6ajOmrh1s79d4P0VlXbOR9I2+rsm/t\n7FuvkbddwmteAAiJKQCELo3pt1muuB4j7xt5W5V9a2ffeo287Z9d9DdTAOAtr3kBICSmABASUwAI\niSkAhMQUAEK/AYavTlXLTu/MAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.palplot(sns.light_palette(\"purple\",8, reverse=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set up the data that we want to plot" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "limits = [80, 100, 150]\n", "data_to_plot = (\"Example 1\", 105, 120)\n", "palette = sns.color_palette(\"Blues_r\", len(limits))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Try the first version of building a stacked bar chart" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.set_aspect('equal')\n", "ax.set_yticks([1])\n", "ax.set_yticklabels([data_to_plot[0]])\n", "\n", "prev_limit = 0\n", "for idx, lim in enumerate(limits):\n", " ax.barh([1], lim-prev_limit, left=prev_limit, height=15, color=palette[idx])\n", " prev_limit = lim" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Expand on the version to add the value we are measuring" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.set_aspect('equal')\n", "ax.set_yticks([1])\n", "ax.set_yticklabels([data_to_plot[0]])\n", "\n", "prev_limit = 0\n", "for idx, lim in enumerate(limits):\n", " ax.barh([1], lim-prev_limit, left=prev_limit, height=15, color=palette[idx])\n", " prev_limit = lim\n", " \n", "# Draw the value we're measuring\n", "ax.barh([1], data_to_plot[1], color='black', height=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now add on the target vertical line" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.set_aspect('equal')\n", "ax.set_yticks([1])\n", "ax.set_yticklabels([data_to_plot[0]])\n", "\n", "prev_limit = 0\n", "for idx, lim in enumerate(limits):\n", " ax.barh([1], lim-prev_limit, left=prev_limit, height=15, color=palette[idx])\n", " prev_limit = lim\n", " \n", "# Draw the value we're measuring\n", "ax.barh([1], data_to_plot[1], color='black', height=5)\n", "ax.axvline(data_to_plot[2], color=\"gray\", ymin=0.10, ymax=0.9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Build out a full function" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def bulletgraph(data=None, limits=None, labels=None, axis_label=None, title=None,\n", " size=(5, 3), palette=None, formatter=None, target_color=\"gray\",\n", " bar_color=\"black\", label_color=\"gray\"):\n", " \"\"\" Build out a bullet graph image\n", " Args:\n", " data = List of labels, measures and targets\n", " limits = list of range valules\n", " labels = list of descriptions of the limit ranges\n", " axis_label = string describing x axis\n", " title = string title of plot\n", " size = tuple for plot size\n", " palette = a seaborn palette\n", " formatter = matplotlib formatter object for x axis\n", " target_color = color string for the target line\n", " bar_color = color string for the small bar\n", " label_color = color string for the limit label text\n", " Returns:\n", " a matplotlib figure\n", " \"\"\"\n", " # Determine the max value for adjusting the bar height\n", " # Dividing by 10 seems to work pretty well\n", " h = limits[-1] / 10\n", "\n", " # Use the green palette as a sensible default\n", " if palette is None:\n", " palette = sns.light_palette(\"green\", len(limits), reverse=False)\n", "\n", " # Must be able to handle one or many data sets via multiple subplots\n", " if len(data) == 1:\n", " fig, ax = plt.subplots(figsize=size, sharex=True)\n", " else:\n", " fig, axarr = plt.subplots(len(data), figsize=size, sharex=True)\n", "\n", " # Add each bullet graph bar to a subplot\n", " for idx, item in enumerate(data):\n", "\n", " # Get the axis from the array of axes returned when the plot is created\n", " if len(data) > 1:\n", " ax = axarr[idx]\n", "\n", " # Formatting to get rid of extra marking clutter\n", " ax.set_aspect('equal')\n", " ax.set_yticklabels([item[0]])\n", " ax.set_yticks([1])\n", " ax.spines['bottom'].set_visible(False)\n", " ax.spines['top'].set_visible(False)\n", " ax.spines['right'].set_visible(False)\n", " ax.spines['left'].set_visible(False)\n", "\n", " prev_limit = 0\n", " for idx2, lim in enumerate(limits):\n", " # Draw the bar\n", " ax.barh([1], lim - prev_limit, left=prev_limit, height=h,\n", " color=palette[idx2])\n", " prev_limit = lim\n", " rects = ax.patches\n", " # The last item in the list is the value we're measuring\n", " # Draw the value we're measuring\n", " ax.barh([1], item[1], height=(h / 3), color=bar_color)\n", "\n", " # Need the ymin and max in order to make sure the target marker\n", " # fits\n", " ymin, ymax = ax.get_ylim()\n", " ax.vlines(\n", " item[2], ymin * .9, ymax * .9, linewidth=1.5, color=target_color)\n", "\n", " # Now make some labels\n", " if labels is not None:\n", " for rect, label in zip(rects, labels):\n", " height = rect.get_height()\n", " ax.text(\n", " rect.get_x() + rect.get_width() / 2,\n", " -height * .4,\n", " label,\n", " ha='center',\n", " va='bottom',\n", " color=label_color)\n", " if formatter:\n", " ax.xaxis.set_major_formatter(formatter)\n", " if axis_label:\n", " ax.set_xlabel(axis_label)\n", " if title:\n", " fig.suptitle(title, fontsize=14)\n", " fig.subplots_adjust(hspace=0)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data_to_plot2 = [(\"John Smith\", 105, 120),\n", " (\"Jane Jones\", 99, 110),\n", " (\"Fred Flintstone\", 109, 125),\n", " (\"Barney Rubble\", 135, 123),\n", " (\"Mr T\", 45, 105)]\n", "\n", "bulletgraph(data_to_plot2, limits=[20, 60, 100, 160], labels=[\"Poor\", \"OK\", \"Good\", \"Excellent\"], size=(8,5), \n", " axis_label=\"Performance Measure\", label_color=\"black\", bar_color=\"#252525\", target_color='#f7f7f7',\n", " title=\"Sales Rep Performance\")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def money(x, pos):\n", " 'The two args are the value and tick position'\n", " return \"${:,.0f}\".format(x)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nN9b61kmSJLUhrXWIdjeKILZUSuld4DWKkDkIOB74OHB8RGy3ivr2AP4V2BX4GDA0ItYBfgoMTykN\nBq6lGSOEkiRJuWgrX3T8QEppLkBEPAtsD7y+kvJjU0p/K8tPAPoAcyhG9O4rjgjTGWh09C4izgTO\nBOjVqxebbLJJy2yFJElSG9BaAe9ZYHjlhIjYGOgNfAQsqpi1uIZ2NVY+gCkppf1X1ZiU0tXA1QD9\n+vVLqyovSZLUnrTWIdoHgA0i4ksAEdEZ+E9gFDC/hdYxFdg8IvYv17FOROzWQnVLkiS1G60S8FJK\nCfgs8LmIeBF4AVgIfLMF1/EBxSjhjyLiGWAC4JW3kiSpw2m1c/BSSq8DxzQya1R5ayh3dMX9PhX3\nu5V/HwYerph+bsX9CcBBLdVmSZKk9shfspAkScqMAU+SJCkzBjxJkqTMGPAkSZIy01a+6Lhuxo8f\nv+pC6lDGjBlT7yZINenbty8AI0eObJX1+dqQ2g9H8CRJkjLT4UfwctO9e3d22203Ukp07tyZH//4\nx+y7774rXWarrbbijTca/VU3aaVmzZrFyJEjee2110gpse+++3LGGWewzjrr1LT8d77zHd58800W\nLFjA3Llz2XLLLQE499xz2W23tfM95e+++y6PPPIIRx999KoLS63gueee4+abb+acc85h8803Z9q0\naYwePZqTTjqp3k1TO2bAy0zXrl15/PHHAbj//vu55JJL+OMf/1jnVilHKSUuvfRSjj76aL7zne+w\nePFiLr/8ckaNGsU//dM/1VTHiBEjAHjmmWe49dZb+e53v9usNixevJjOnTs3a5l58+bx+9//3oCn\nNmPy5Mn07t2byZMnc8ghh9S7OcqEAS9j8+bNo3v37ksfX3755dx+++188MEHHH300Vx00UXLlU8p\n8e1vf5v77ruPiODf/u3fOO6447jgggsYNmwYRx55JF/4whfo3r07V155JTfccAPTpk3j4osvbu1N\nUxswYcIE1l13XY444ggAOnfuzFlnncUpp5zCF7/4RR555BGeeOIJFi5cyBtvvMHQoUM544wzaq7/\n+uuv56mnnmLRokXstttunHfeeUQEF1xwAf369WPy5Mkceuih7LvvvvzoRz9i0aJF7Lffftx9993c\nfvvtANx888089thjfPjhhxxwwAGcfPLJXHvttfztb3/j7LPPZq+99uL0009fK/0j1WLRokW89tpr\nnHLKKdx0001LA96iRYu48cYb+fvf/06fPn046qij6NSpE5MmTeLRRx8lpUS/fv04/PDDeeqpp5g9\nezaf/OQnAfjLX/7CjBkzOOqoo3jmmWd48sknWbx4Mdtuu+3SepQ/A15mFixYwNChQ1m4cCFvvfUW\nd999NwAPPPAAL7/8Mg8//DApJY4//ngef/xxhg4dunTZu+66i0mTJjF69GjeeecdDj74YIYOHcqQ\nIUMYPXo0Rx55JDNmzODNN98EYPTo0Rx33HF12U7V36uvvrr0JP8GG264Ib169WLGjBkAvPzyy1x5\n5ZWss846nH766Xz605+mV69eNdV/7LHH8qUvfYmUEj/84Q8ZN24ce++9NwBLlixZemHBN7/5TYYP\nH85BBx3EnXfeuXT5sWPHMnPmTH7yk5+QUuJb3/oWU6ZM4bTTTmPGjBn87Gc/a4lukNbI1KlT2Wmn\nnejZsyddu3Zd+tqZPn0655xzDt27d+fXv/41zz33HNtttx333XcfZ511Fuuvvz433HADzz33HLvu\nuiu//OUvlwa8KVOmcOCBBzJr1iymTJnC6aefTufOnbnnnnuYOHEigwYNqucmq5UY8DJTeYj2ySef\n5KyzzuLJJ5/kwQcf5MEHH+SAAw4A4L333uPll19eLuCNGTOG4cOH07lzZ3r16sXQoUN5+umnGTJk\nCFdeeSXPP/88/fv3Z86cObz55puMHTuWyy67rC7bqfZh0KBBbLjhhgD07t2bmTNn1hzwJkyYwC23\n3MKHH37I3Llz2WmnnZYGvE984hNLy02dOpXvfe97ABxyyCFcd911QHGF/FNPPcVXvvIVoPjnZ/r0\n6cuNakv1NmnSJPbbbz8ABgwYwKRJk+jXrx/bbLMNPXr0WDr9tddeo3PnzvTp02fpa2rgwIG8+uqr\n7LLLLmy66aa8/vrrbLbZZrz99tv07t2bsWPHMmPGDK6++moAPvroo6XLKn8GvIztu+++vPPOO7z9\n9tuklLjgggs47bTTml3P1ltvzdy5c7n//vsZOnQos2fP5vbbb6dbt25stNFGa6Hlag969+7No48+\nuty0999/n5kzZ7L11lvz0ksvLXexRadOnVi8eHFNdS9cuJArrriCK664gp49ezJq1Cg+/PDDpfPX\nX3/9mur5whe+wKc+9anlpk2fPr2mZaW1bf78+UybNo2ZM2cCxWkyAP369SMilitb/bjagAEDmDJl\n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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "money_fmt = FuncFormatter(money)\n", "data_to_plot3 = [(\"Print\", 50000, 60000),\n", " (\"Billboards\", 75000, 65000),\n", " (\"Radio\", 125000, 80000),\n", " (\"Online\", 195000, 115000)]\n", "palette = sns.light_palette(\"grey\", 3, reverse=False)\n", "bulletgraph(data_to_plot3, limits=[50000, 125000, 200000], labels=[\"Below\", \"On Target\", \"Above\"], size=(10,5), \n", " axis_label=\"Annual Budget\", label_color=\"black\", bar_color=\"#252525\", target_color='#f7f7f7', palette=palette,\n", " title=\"Marketing Channel Budget Performance\", formatter=money_fmt)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }