Created
September 9, 2015 23:01
-
-
Save phobson/7248f4d3b9c9edfcd1b4 to your computer and use it in GitHub Desktop.
cobbler plots?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"%matplotlib inline\n", | |
"\n", | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"import pandas\n", | |
"import seaborn\n", | |
"\n", | |
"seaborn.set(style='white')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Class Season\n", | |
"Treated SuFa 175\n", | |
" Wi 40\n", | |
" Sp 120\n", | |
"Untreated SuFa 200\n", | |
" Wi 50\n", | |
" Sp 251\n", | |
"Name: Volume, dtype: int64" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"classes = ('Treated', 'Untreated')\n", | |
"seasons = ('SuFa', 'Wi', 'Sp')\n", | |
"index = pandas.MultiIndex.from_product([classes, seasons], names=['Class', 'Season'])\n", | |
"values = [175, 40, 120, 200, 50, 251]\n", | |
"dataframe = pandas.DataFrame(data=values, index=index, columns=['Volume'])\n", | |
"\n", | |
"data = dataframe['Volume']\n", | |
"data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n+jUrSH02ncpVqp92/O9/e5O2He7D43bjdJbu0O7iokCPKXJRnfPSvFDlcDjw+/0seW0q8ZWrMWPi\nCADq/LoRne99BCjdgRs1aUm4y0WT5rfy54xROJ1hPNZ/WBAnF7lwDnP8tzpnsO6zvYGc5bKVkOgP\n9ggSYhLjz/6LU6ufHotcjhStiGUUrYhlFK2IZRStiGUUrYhlFK2IZRStiGUUrYhlzvkyxuzDhYGa\n47KWkBgZ7BHEItppRSyjaEUso2hFLKNoRSxj5fW0l5p/5v0c7BEkxOjSPJFLiKIVsYyiFbGMohWx\njKIVsYyiFbGMohWxjKKVgNnz7W7GP/0SADn7shmTOoqxT73I/IxXyt6f6bVJc3lpwAtsWPsxAIUF\nhcwemxm0mUORopWAWLXkr8x7eQ7ekl/e8XDmAu5+9H6eSR+GMfDFhq0U5OWTl5vHkJef5+N3PwDg\nb4veoUPXzsEcPeQoWgmIqjWr8vvhT2Io3VH/sesH6jasB0CDZo34ZusOyrnC//WOh65wDvx8AI/b\nQ82EK4M5eshRtBIQTW5qhjPshG+3E97XIiIqkqLCQiIiI7i+RWPmjJvJHd3vYuXCFbS56zYWTnuN\nxTPm4y52B37wEKRoJSgcDkfZx+7CIqJiogG4pWMyfYf1x/gNlatX4dsvvqZuw3pc95u6bFq3IVjj\nhhRFK0FxzXUJfLf9WwC+3Ly97KnycWuXr+K2e9vjKXaX7dDuIr23MOgqHwkwB6U77P19HmLey3Pw\nlXipkXAlTW9uVnafzes3cn2LJoS7XDS9JYmZo6fidDrpPaRfsMYOKed817xFq78L5CyXrZp1c4M9\ngoSYW2o1P+sxPT0WsYyiFbGMohWxjKIVsYyiFbGMohWxjKIVsYxeXBECcgoOBnsEsYh2WhHLKFoR\nyyhaEcsoWhHLKFoRyyhaEcsoWhHLKFoRyyhaEcsoWhHLKFoRyyhaEcsoWhHLKFoRyyhaEcsoWhHL\nKFoRyyhaEcsoWhHLKFoRyyhaEcsoWhHLKFoRyyhaEcsoWhHLKFoRy1j1tiCZYwYQERUDwBWVqtL8\n1s6sXDoTZ1gY5cqV4+6UgcSWr8iKRVPJ3vcDSTd35PqkZIqLCvjr0hnc2yM1yCsQuXDWRFtS4gHg\n0SdfLLtt7qShdHqgL9WvrM1nH6/iozVvcsvtD1Bw7Ci9nxrH3MnDuD4pmQ9Xv8HN7e4L1ugiF5U1\n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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x8bad668>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig, ax = plt.subplots(figsize=(4, 4))\n", | |
"ax.set_aspect('equal')\n", | |
"\n", | |
"xgroup = 'Class'\n", | |
"ygroup = 'Season'\n", | |
"\n", | |
"groups = data.groupby(level=xgroup)\n", | |
"\n", | |
"colors = {\n", | |
" 'Treated': seaborn.color_palette(palette='deep')[0],\n", | |
" 'Untreated': seaborn.color_palette(palette='deep')[1]\n", | |
"}\n", | |
"\n", | |
"xstart = 0\n", | |
"xticks = []\n", | |
"xticklabels = []\n", | |
"for name, group in groups:\n", | |
" color = colors[name]\n", | |
" xstop = group.sum() / data.sum() + xstart\n", | |
" width = xstop - xstart\n", | |
" xcenter = xstart + 0.5 * width\n", | |
" \n", | |
" xticks.append(xcenter)\n", | |
" xticklabels.append(name)\n", | |
" \n", | |
" yvals = group / group.sum()\n", | |
" ystart = 0\n", | |
" for height in yvals:\n", | |
" ystop = ystart + height\n", | |
" ycenter = ystart + 0.5 * height\n", | |
" rect = plt.Rectangle((xstart, 0), width, ystop, alpha=0.2, facecolor=color, linewidth=0)\n", | |
" ax.add_patch(rect)\n", | |
" ax.annotate('{:.0f}%'.format(100*height), (xcenter, ycenter), (0, 0), \n", | |
" xycoords='data', textcoords='offset points',\n", | |
" ha='center', va='center')\n", | |
" \n", | |
" ystart = ystop\n", | |
" \n", | |
" xstart = xstop\n", | |
"\n", | |
"\n", | |
"ax.set_xticks(xticks)\n", | |
"ax.set_xticklabels(xticklabels)\n", | |
"ax.set_yticks([])\n", | |
"seaborn.despine(left=True, bottom=True)" | |
] | |
} | |
], | |
"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.4.3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment