Skip to content

Instantly share code, notes, and snippets.

@phobson
Created April 24, 2015 23:46
Show Gist options
  • Save phobson/e8bab5959546c57f76d1 to your computer and use it in GitHub Desktop.
Save phobson/e8bab5959546c57f76d1 to your computer and use it in GitHub Desktop.
parallel_coords
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\n",
"import numpy as np\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.transforms as mtrans\n",
"import mpl_toolkits.axes_grid1.inset_locator as inset\n",
"\n",
"import pandas\n",
"import seaborn\n",
"\n",
"seaborn.set(style='ticks')\n",
"%matplotlib inline\n",
"\n",
"def _connector(bbox1, bbox2, loc1a, loc2a, loc1b, loc2b, line_kwds=None):\n",
" if line_kwds is None:\n",
" line_kwds = {}\n",
"\n",
" c1 = inset.BboxConnector(bbox1, bbox2, loc1=loc1a, loc2=loc2a, **line_kwds)\n",
" c1.set_clip_on(False)\n",
" c2 = inset.BboxConnector(bbox1, bbox2, loc1=loc1b, loc2=loc2b, **line_kwds)\n",
" c2.set_clip_on(False)\n",
"\n",
" return c1, c2\n",
"\n",
"\n",
"def connect_spines(left_ax, right_ax, left_y, right_y, **line_kwds):\n",
" right_trans = mtrans.blended_transform_factory(right_ax.transData, right_ax.transAxes)\n",
" left_trans = mtrans.blended_transform_factory(left_ax.transData, left_ax.transAxes)\n",
"\n",
" bbox = mtrans.Bbox.from_extents(0, left_y, 0, right_y)\n",
"\n",
" right_bbox = mtrans.TransformedBbox(bbox, right_trans)\n",
" left_bbox = mtrans.TransformedBbox(bbox, left_trans)\n",
"\n",
" c1, c2 = _connector(left_bbox, right_bbox,\n",
" loc1a=3, loc2a=2, loc1b=4, loc2b=1,\n",
" line_kwds=line_kwds)\n",
"\n",
" left_ax.add_patch(c1)\n",
" left_ax.add_patch(c2)\n",
"\n",
"\n",
" return c1, c2\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nlpRKWpShvNTFklJJC9X7Kz9LSiW1odfh15SUbrOkVNKi9Tr8GJWU3tr1EJLK09vws6RUUpv6/ISH\nJaWSWtPLKz9LSiW1rXfhZ0mppGXoXfhhSamkJehV+FlSKmlZJj7hEWPcANwFnAMcAC5PKT0xdv5S\n4OeA54F/BH4mpTTPi5EtKT2GDnaho3AP5Zh25XcJcEJKaTtwPWOvuYsxngh8EPihlNLrgJOBi9Y7\nyLPPPnselpROsrRdaCL3UIhp4Xc+sAsgpfQQcN7YuW8Ar00pfaM53gisO7gOHDhwkSWlEy1tF5rI\nPRRiWvidBOwfOz7UXPaTUsoppf8CiDFeDXxbSunP1zvIpk2b/mS9t63E0nahidxDIaa9yHk/sGXs\neENK6fCRg2bpHwG+F3jbPIOcfvrp/zDP7SuwtF1oIvdQiGnhtxu4GLg3xrgNeGTV+U8yutR/y1oe\n1I0xrgA71jGn3EVfuIdChElNUTHGwAvPbAFcBpwLbAb+vvnz12M3+VhK6Y9nGSDGeCbwJLA1pfTU\nLLetibvoB/dQjolXfs1Prveu+vCesb8ft/CJdFTuoh/cQzl69SJnSVoWw09SlQw/SVUy/CRVyfCT\nVCXDT1KVDD9JVTL8JFXJ8JNUJcNPUpUMP0lVMvwkVcnwk1Qlw09SlQw/SVUy/CRVyfCTVCXDT1KV\nDD9JVTL8JFXJ8JNUJcNPUpUMP0lVMvwkVcnwk1Qlw09SlQw/SVUy/CRVyfCTVCXDT1KVDD9JVTL8\nJFXJ8JNUJcNPUpUMP0lVMvwkVcnwk1Qlw09SlQw/SVUy/CRVyfCTVCXDT1KVDD9JVTL8JFXJ8JNU\nJcNPUpUMP0lVMvwkVWnjpJMxxg3AXcA5wAHg8pTSE2PnLwZ+BXge+HRK6bdanLVq7qIf3EM5pl35\nXQKckFLaDlwP3HrkRIzxeOA24ELgDcAVMcaXtTWo3EVPuIdCTAu/84FdACmlh4Dzxs69Cng8pbQv\npXQQeAB4fStTCtxFX7iHQkwLv5OA/WPHh5rL/iPn9o2d+xpw8gJn0zdzF/3gHgox8TE/RkveMna8\nIaV0uPn7vlXntgDPTbqzGOMKsGPGGTXiLvrBPRRiWvjtBi4G7o0xbgMeGTv3GHBWjPGlwNcZXd7f\nMunOUkorwMr4x2KMG4HvAr46y+AVchf94B4KEXLOxzwZYwy88MwWwGXAucDmlNLOGONFwE2Mfn3+\nVErpEy3PWy130Q/uoRwTw0+SSuWLnCVVyfCTVCXDT1KVDD9JVTL8JFXJ8JNUJcNPUpUMP0lV+n+R\nBh2ObPKUcAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x44ae630>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"fig, (left_ax, center_ax, right_ax) = plt.subplots(ncols=3, figsize=(5,5))\n",
"_ = connect_spines(left_ax, center_ax, 0.2, 0.8)\n",
"_ = connect_spines(center_ax, right_ax, 0.8, 0.5)\n",
"\n",
"seaborn.despine(fig=fig, bottom=True)\n",
"for ax in fig.axes:\n",
" ax.set_xticks([])"
]
}
],
"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