Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save thesamovar/52dbbb3a58a73c590d54c34f5f719bac to your computer and use it in GitHub Desktop.
Save thesamovar/52dbbb3a58a73c590d54c34f5f719bac to your computer and use it in GitHub Desktop.
Automatic scientific axes layout for matplotlib.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\nimport matplotlib.pyplot as plt\nimport matplotlib.gridspec as gridspec",
"execution_count": 1,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def panel_specs(layout, fig=None):\n # default arguments\n if fig is None:\n fig = plt.gcf()\n # format and sanity check grid\n lines = layout.split('\\n')\n lines = [line.strip() for line in lines if line.strip()]\n linewidths = set(len(line) for line in lines)\n if len(linewidths)>1:\n raise ValueError('Invalid layout (all lines must have same width)')\n width = linewidths.pop()\n height = len(lines)\n panel_letters = set(c for line in lines for c in line)-set('.')\n # find bounding boxes for each panel\n panel_grid = {}\n for letter in panel_letters:\n left = min(x for x in range(width) for y in range(height) if lines[y][x]==letter)\n right = 1+max(x for x in range(width) for y in range(height) if lines[y][x]==letter)\n top = min(y for x in range(width) for y in range(height) if lines[y][x]==letter)\n bottom = 1+max(y for x in range(width) for y in range(height) if lines[y][x]==letter)\n panel_grid[letter] = (left, right, top, bottom)\n # check that this layout is consistent, i.e. all squares are filled\n valid = all(lines[y][x]==letter for x in range(left, right) for y in range(top, bottom))\n if not valid:\n raise ValueError('Invalid layout (not all square)')\n # build axis specs\n gs = gridspec.GridSpec(ncols=width, nrows=height, figure=fig)\n specs = {}\n for letter, (left, right, top, bottom) in panel_grid.items():\n specs[letter] = gs[top:bottom, left:right]\n return specs, gs\n\ndef panels(layout, fig=None):\n # default arguments\n if fig is None:\n fig = plt.gcf()\n specs, gs = panel_specs(layout, fig=fig)\n for letter, spec in specs.items():\n axes[letter] = fig.add_subplot(spec)\n return axes, gs\n\ndef label_panel(ax, letter, *, prefix='', postfix='.', spaces=6, pad=10, fontsize=18):\n ax.set_title(prefix+letter+postfix+' '*spaces, loc='left', pad=pad,\n fontdict={'horizontalalignment': 'right',\n 'fontsize': fontsize})\n\ndef label_panels(axes, letters=None, *, prefix='', postfix='.', spaces=6, pad=10, fontsize=18):\n if letters is None:\n letters = axes.keys()\n for letter in letters:\n ax = axes[letter]\n label_panel(ax, letter, prefix=prefix, postfix=postfix, spaces=spaces, pad=pad, fontsize=fontsize)\n \nlayout = '''\n AAB\n AA.\n .DD\n '''\nfig = plt.figure(figsize=(10, 7))\naxes, spec = panels(layout, fig=fig)\nspec.set_width_ratios([1, 3, 1])\nlabel_panels(axes, letters='ABD')\nplt.tight_layout()",
"execution_count": 20,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x504 with 3 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "layout = '''\n AAAB\n CDEB\n '''\nfig = plt.figure(figsize=(10, 5))\naxes, spec = panels(layout, fig=fig)\nlabel_panels(axes)\nplt.tight_layout()",
"execution_count": 14,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x360 with 5 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "layout = '''\n AAAB\n AAAC\n AAAD\n '''\nN = 5\nfig = plt.figure(figsize=(8, 6))\nspecs, gs = panel_specs(layout, fig=fig)\naxes = {}\nfor letter in 'BCD':\n axes[letter] = ax = fig.add_subplot(specs[letter])\n label_panel(ax, letter)\nsubgs = specs['A'].subgridspec(N, N, wspace=0, hspace=0)\ntriaxes = {}\nfor i in range(N):\n for j in range(i+1):\n triaxes[i, j] = ax = fig.add_subplot(subgs[i, j])\n ax.set_xticks([])\n ax.set_yticks([])\n if i==N-1:\n ax.set_xlabel(chr(ord('α')+j))\n if j==0:\n ax.set_ylabel(chr(ord('α')+i))\nlabel_panel(triaxes[0, 0], 'A', spaces=2)\nplt.tight_layout()",
"execution_count": 42,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 576x432 with 18 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
}
],
"metadata": {
"kernelspec": {
"name": "conda-env-brian-py",
"display_name": "Python [conda env:brian]",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.8.2",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"gist": {
"id": "",
"data": {
"description": "Automatic scientific axes layout for matplotlib.ipynb",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment