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\nfrom matplotlib import transforms",
"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 axes = {}\n for letter, spec in specs.items():\n axes[letter] = fig.add_subplot(spec)\n return axes, gs\n\ndef label_panel(ax, letter, *,\n offset_left=0.8, offset_up=0.2, prefix='', postfix='.', **font_kwds):\n kwds = dict(fontsize=18)\n kwds.update(font_kwds)\n # this mad looking bit of code says that we should put the code offset a certain distance in\n # inches (using the fig.dpi_scale_trans transformation) from the top left of the frame\n # (which is (0, 1) in ax.transAxes transformation space)\n fig = ax.figure\n trans = ax.transAxes + transforms.ScaledTranslation(-offset_left, offset_up, fig.dpi_scale_trans)\n ax.text(0, 1, prefix+letter+postfix, transform=trans, **kwds)\n\ndef label_panels(axes, letters=None, **kwds):\n if letters is None:\n letters = axes.keys()\n for letter in letters:\n ax = axes[letter]\n label_panel(ax, letter, **kwds)\n \nlayout = '''\n AAB\n AA.\n .CC\n '''\nfig = plt.figure(figsize=(10, 7))\naxes, spec = panels(layout, fig=fig)\nspec.set_width_ratios([1, 3, 1])\nlabel_panels(axes, letters='ABC')\nplt.tight_layout()",
"execution_count": 2,
"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": 3,
"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": "def tight_xticklabels(ax=None):\n if ax is None:\n ax = plt.gca()\n ticklabels = ax.get_xticklabels()\n ticklabels[0].set_ha('left')\n ticklabels[0].set_text(' '+ticklabels[0].get_text())\n ticklabels[-1].set_ha('right')\n ticklabels[-1].set_text(ticklabels[-1].get_text()+' ')\n ax.set_xticklabels(ticklabels)\n \ndef tight_yticklabels(ax=None):\n if ax is None:\n ax = plt.gca()\n ticklabels = ax.get_yticklabels()\n ticklabels[0].set_va('bottom')\n ticklabels[-1].set_va('top')",
"execution_count": 4,
"outputs": []
},
{
"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 = {}\ntighten = []\nfor i in range(N):\n for j in range(i+1):\n triaxes[i, j] = ax = fig.add_subplot(subgs[i, j])\n if i==N-1:\n ax.set_xlabel(chr(ord('α')+j))\n tighten.append((tight_xticklabels, ax))\n else:\n ax.set_xticks([])\n if j==0:\n ax.set_ylabel(chr(ord('α')+i))\n tighten.append((tight_yticklabels, ax))\n else:\n ax.set_yticks([])\nlabel_panel(triaxes[0, 0], 'A')\nplt.tight_layout()\nfor f, ax in tighten:\n f(ax)\nplt.tight_layout()",
"execution_count": 5,
"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": {
"_draft": {
"nbviewer_url": "https://gist.github.com/52dbbb3a58a73c590d54c34f5f719bac"
},
"gist": {
"id": "52dbbb3a58a73c590d54c34f5f719bac",
"data": {
"description": "Automatic scientific axes layout for matplotlib.ipynb",
"public": true
}
},
"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"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment