Last active
August 14, 2024 22:35
Revisions
-
thesamovar revised this gist
Apr 29, 2020 . 1 changed file with 25 additions and 16 deletions.There are no files selected for viewing
This file contains 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 charactersOriginal file line number Diff line number Diff line change @@ -14,8 +14,8 @@ "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", @@ -35,7 +35,7 @@ }, "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", @@ -54,14 +54,23 @@ "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" @@ -71,6 +80,16 @@ } ], "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]", @@ -87,16 +106,6 @@ "pygments_lexer": "ipython3", "nbconvert_exporter": "python", "file_extension": ".py" } }, "nbformat": 4, -
thesamovar revised this gist
Apr 27, 2020 . 1 changed file with 13 additions and 10 deletions.There are no files selected for viewing
This file contains 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 charactersOriginal file line number Diff line number Diff line change @@ -5,7 +5,7 @@ "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": [] }, @@ -14,14 +14,14 @@ "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, *,\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": 100, "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" @@ -35,13 +35,13 @@ }, "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": 101, "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" @@ -54,14 +54,14 @@ "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')\nplt.tight_layout()", "execution_count": 102, "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" @@ -89,11 +89,14 @@ "file_extension": ".py" }, "gist": { "id": "52dbbb3a58a73c590d54c34f5f719bac", "data": { "description": "Automatic scientific axes layout for matplotlib.ipynb", "public": true } }, "_draft": { "nbviewer_url": "https://gist.github.com/52dbbb3a58a73c590d54c34f5f719bac" } }, "nbformat": 4, -
thesamovar revised this gist
Apr 26, 2020 . 1 changed file with 32 additions and 12 deletions.There are no files selected for viewing
This file contains 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 charactersOriginal file line number Diff line number Diff line change @@ -6,26 +6,26 @@ }, "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" } } ] }, @@ -34,18 +34,38 @@ "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" } } ] } -
thesamovar created this gist
Apr 25, 2020 .There are no files selected for viewing
This file contains 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,81 @@ { "cells": [ { "metadata": { "trusted": true }, "cell_type": "code", "source": "%matplotlib inline\nimport matplotlib.pyplot as plt\nimport matplotlib.gridspec as gridspec", "execution_count": 21, "outputs": [] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "from collections import namedtuple\ndef make_panelled_axes(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)\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 axes\n axes = {}\n spec = gridspec.GridSpec(ncols=width, nrows=height, figure=fig)\n for letter, (left, right, top, bottom) in panel_grid.items():\n axes[letter] = fig.add_subplot(spec[top:bottom, left:right])\n return axes, spec\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 ax.set_title(prefix+letter+postfix+' '*spaces, loc='left', pad=pad,\n fontdict={'horizontalalignment': 'right',\n 'fontsize': fontsize})\n \nlayout = '''\n AAB\n AAx\n CDD\n '''\nfig = plt.figure(figsize=(10, 7))\naxes, spec = make_panelled_axes(layout, fig=fig)\nspec.set_width_ratios([1, 3, 1])\nlabel_panels(axes, letters='ABCD')\nplt.tight_layout()", "execution_count": 56, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "<Figure size 720x504 with 5 Axes>" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "layout = '''\n AAAB\n CDEB\n '''\nfig = plt.figure(figsize=(10, 5))\naxes, spec = make_panelled_axes(layout, fig=fig)\nlabel_panels(axes)\nplt.tight_layout()", "execution_count": 57, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "<Figure size 720x360 with 5 Axes>" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ] } ], "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 }