{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This is an experiement of how one could try to improve matplotlib configuration system\n", "using IPython's traitlets system; It has probably a **huge** number of disatvantages going\n", "from slowing down all the matplotlib stack, as making every class name matter \n", "in backward compatibility.\n", "\n", "Far from beeing a perfect lovechild of two awesome project, this is for now an horible mutant \n", "that at some point inspect up it's statck to find information about it's caller in some places.\n", "It woudl need a fair amount of work to be nicely integrated into matplotlib." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Warning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This post has been written with a [patched version of Matplotlib](https://github.com/Carreau/matplotlib/compare/master...traitlets), so you will not be able to reproduce this post by re-executing this notebook.\n", "\n", "I've also ripped out part of IPython configurable sytem into a small [self contained package](https://github.com/Carreau/IPConfigurable) that you would need. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## TL,DR;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is an example where the color of **any** `Text` object of matplotlib has a configurable color as long as the object that creates it is (also) an `Artist`, with minimal modification of matplotlib." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline\n", "from IPConfigurable.configurable import Config\n", "matplotlib.rc('font',size=20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the interesting part where one cas see that everything is magically configurable." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "matplotlib.config = Config()\n", "\n", "# by default all Text are now purple\n", "matplotlib.config.Text.t_color = 'purple'\n", "\n", "# Except Text created by X/Y Axes will red/aqua\n", "matplotlib.config.YAxis.Text.t_color='red'\n", "matplotlib.config.XAxis.Text.t_color='aqua'\n", "\n", "# If this is the text of a Tick it should be orange \n", "matplotlib.config.Tick.Text.t_color='orange'\n", "\n", "# unless this is an XTick, then it shoudl be Gray-ish\n", "# as (XTick <: Tick) it will have precedence over Tick\n", "matplotlib.config.XTick.Text.t_color=(0.4,0.4,0.3)\n", "\n", "## legend\n", "matplotlib.config.TextArea.Text.t_color='y'\n", "matplotlib.config.AxesSubplot.Text.t_color='pink'" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "UZTM8T/lA7SwSaPm4wAAAABJRU5ErkJggg==\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(sinc(arange(0,3*np.pi,0.1)),'green', label='a sinc')\n", "plt.ylabel('sinc(x)')\n", "plt.xlabel('This is X')\n", "plt.title('Title')\n", "plt.annotate('Max',(20,0.2))\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### I love Matplotlib" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I love Matplotlib and [what you can do with it](http://jakevdp.github.io/blog/2013/07/10/XKCD-plots-in-matplotlib/), I am always impressed by how [Jake Van Der Plas](http://jakevdp.github.io) is able to bend Matpltolib in dooing amazing things. That beeing said, default color for matplotlib graphics are not that nice, mainly because of legacy, and even if Matplotlib is [hightly configurable](http://matplotlib.org/users/customizing.html), many [libraries](https://github.com/mwaskom/seaborn) are trying to [fix it](https://github.com/yhat/ggplot/) and receipt on the net are common." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### IPython configuration is magic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'm not that familiar with Matplotlib internal, but I'm quite familiar with IPython's internal. \n", "In particular, using a lightweight version of Enthought Traits we call Traitlets, almost every pieces of IPython is configurable. \n", "\n", "According to [Clarke's third law](https://en.wikipedia.org/wiki/Clarke's_three_laws)\n", "\n", "> Any sufficiently advanced technology is indistinguishable from magic." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So I'll assume that IPython configuration system is magic. Still there is some rule you shoudl know. \n", "\n", "In IPython, any object that inherit from `Configurable` can have attributes that are configurable.\n", "The name of the configuration attribute that will allow to change the value of this attribute are easy, it's \n", "`Class.attribute = Value`, and if the creator of an object took care of passing a reference to itself, you can nest config as `ParentClass.Class.attribute = value`, by dooing so only `Class` created by `ParentClass` will have `value` set. With a dummy example. \n", "\n", "```python\n", "\n", "class Foo(Configurable):\n", "\n", " length = Integer(1,config=True)\n", " ...\n", " \n", "class Bar(Configurable):\n", "\n", " def __init__(self):\n", " foo = Foo(parent=self)\n", "\n", "class Rem(Bar):\n", " pass\n", "\n", "```\n", "\n", "\n", "every `Foo` object length can be configured with `Foo.length=2` or you can target a subset of foo by setting `Rem.Foo.length` or `Bar.Foo.lenght`.\n", "\n", "\n", "But this might be a little abstarct, let's do a demo with matplotlib" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/bussonniermatthias/matplotlib\n" ] } ], "source": [ "cd ~/matplotlib/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "let's make matplotlib `Artist` an IPython `Configurable`, grab default config from `matplotlib.config` if it exist, and pass it to parrent.\n", "\n", " -class Artist(object):\n", " +class Artist(Configurable):\n", "\n", " - def __init__(self):\n", " + def __init__(self, config=None, parent=None):\n", " + \n", " + c = getattr(matplotlib,'config',Config({}))\n", " + if config :\n", " + c.merge(config)\n", " + super(Artist, self).__init__(config=c, parent=parent)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will define 2 attributes of `Patches` (a subclass of Artist) ; `t_color`, `t_lw` that are respectively a `Color` or a `Float` and set the default color of current `Patch` to this attribute." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " class Patch(artist.Artist):\n", "\n", " + t_color = MaybeColor(None,config=True)\n", " + t_lw = MaybeFloat(None,config=True)\n", " +\n", " ...\n", " if linewidth is None:\n", " - linewidth = mpl.rcParams['patch.linewidth']\n", " + if self.t_lw is not None:\n", " + linewidth = self.t_lw\n", " + else:\n", " + linewidth = mpl.rcParams['patch.linewidth']\n", " ...\n", " if color is None:\n", " - color = mpl.rcParams['patch.facecolor']\n", " + if self.t_color is not None:\n", " + color = self.t_color\n", " + else :\n", " + color = mpl.rcParams['patch.facecolor']\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One could also set `_t_color_default` to `mpl.rcParams['patch.facecolor']` but it becommes complicaed for the explanation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## That's enough" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the minimum viable to have this to work we can know magically configure independently **any** Subclass of `Patche`s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We know that `Wedge`, `Ellipse`,`...` and other are part of this category, so let's play with their `t_color`" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# some minimal imports\n", "import matplotlib.pyplot as plt;\n", "\n", "import numpy as np\n", "import matplotlib.path as mpath\n", "import matplotlib.lines as mlines\n", "import matplotlib.patches as mpatches\n", "from matplotlib.collections import PatchCollection\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "matplotlib.config = Config({\n", " \"Wedge\" :{\"t_color\":\"0.4\"},\n", " \"Ellipse\" :{\"t_color\":(0.9, 0.3, 0.7)},\n", " \"Circle\" :{\"t_color\":'red'},\n", " \"Arrow\" :{\"t_color\":'green'},\n", " \"RegularPolygon\":{\"t_color\":'aqua'},\n", " \"FancyBboxPatch\":{\"t_color\":'y'},\n", " })" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what this gives :" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\"\n", "example derived from \n", "http://matplotlib.org/examples/shapes_and_collections/artist_reference.html\n", "\"\"\"\n", "fig, ax = plt.subplots()\n", "grid = np.mgrid[0.2:0.8:3j, 0.2:0.8:3j].reshape(2, -1).T\n", "\n", "patches = []\n", "patches.append(mpatches.Circle(grid[0], 0.1,ec=\"none\"))\n", "patches.append(mpatches.Rectangle(grid[1] - [0.025, 0.05], 0.05, 0.1, ec=\"none\"))\n", "patches.append(mpatches.Wedge(grid[2], 0.1, 30, 270, ec=\"none\"))\n", "patches.append(mpatches.RegularPolygon(grid[3], 5, 0.1))\n", "patches.append(mpatches.Ellipse(grid[4], 0.2, 0.1))\n", "patches.append(mpatches.Arrow(grid[5, 0]-0.05, grid[5, 1]-0.05, 0.1, 0.1, width=0.1))\n", "patches.append(mpatches.FancyBboxPatch(\n", " grid[7] - [0.025, 0.05], 0.05, 0.1,\n", " boxstyle=mpatches.BoxStyle(\"Round\", pad=0.02)))\n", "collection = PatchCollection(patches, match_original=True)\n", "ax.add_collection(collection)\n", "\n", "plt.subplots_adjust(left=0, right=1, bottom=0, top=1)\n", "plt.axis('equal')\n", "plt.axis('off')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It works !!! Isn't that great ? Free configuration for all `Artists` ; of course as long as you don't explicitely set the color, or course. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's be ugly." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need slightly more to have nested configuration, each `Configurable` have to be passed the `parent` keyword, \n", "but Matplotlib is not made to pass the `parent` keyword to every Artist it creates, this prevent the use of nested configuration. Still using inspect, we can try to get a handle on the parent, by walking up the stack. \n", "\n", "adding the following in `Artist` constructor:\n", "\n", "```python\n", "import inspect \n", "def __init__(self, config=None, parent=None):\n", " i_parent = inspect.currentframe().f_back.f_back.f_locals.get('self',None)\n", " if (i_parent is not self) and (parent is not i_parent) :\n", " if (isinstance(i_parent,Configurable)):\n", " parent = i_parent\n", " ....\n", "```\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "let's patch `Text` to also accept a `t_color` configurable, bacause `Text` is a good candidate for nesting configurability:\n", "\n", "\n", " class Text(Artist):\n", " + t_color = MaybeColor(None,config=True)\n", "\n", " if color is None:\n", " - color = rcParams['text.color']\n", " + if self.t_color is not None:\n", " + color = self.t_color\n", " + else :\n", " + color = rcParams['text.color']\n", " + if self.t_color is not None:\n", " + color = self.t_color\n", " +\n", " if fontproperties is None:\n", " fontproperties = FontProperties()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we shoudl be able to make default `Text` always purple, nice things about `Config` object is that once created they accept acces of any attribute with dot notation." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "matplotlib.config.Text.t_color = 'purple'" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,ax = plt.subplots(1,1)\n", "plt.plot(sinc(arange(0,6,0.1)))\n", "plt.ylabel('SinC(x)')\n", "plt.title('SinC of X')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, not much further than current matplotlib configuratin right ? \n", "\n", "We also know that `XAxis` and `Yaxis` inherit from `Axis` which itself inherit from `Artist`.\n", "Both are responsible from creating the x- and y-label " ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "matplotlib.config.YAxis.Text.t_color='r'\n", "matplotlib.config.YAxis.Text.t_color='aqua'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "same goes for `Tick`, `XTick` and `YTicks`. I can of course set a parameter to the root class:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "matplotlib.config.Tick.Text.t_color='orange'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and overwrite it for a specific subclass:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "matplotlib.config.XTick.Text.t_color='gray'" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "TkSuQmCC\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,ax = plt.subplots(1,1)\n", "plt.plot(sinc(arange(0,6,0.1)))\n", "plt.ylabel('SinC(x)')\n", "plt.title('SinC of X')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is, as far as I know not possible to do with current matplotlib confuguration system.\n", "At least not without adding a rc-param for each and every imaginable combinaison. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What more ?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First thing it that this make it trivial for external library to plug into matplotlib configuration system to have their own defaults/configurable defaults. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You also can of course refine configurability by use small no-op class that inherit from base classes and give them meaning. Especially right now, `Tick`s are separated in `XTick` and `YTick` with a major/minor attribute. \n", "They shoudl probably be refactor into `MajorTick`/`MinorTick`. With that you can mix and match configuration from the most global `Axis.Tick.value=...` to the more precise `YAxis.MinorTick`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's do an example with a custom artist that create 2 kinds of circles. We'll need a custom no-op class that inherit Circle." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "class CenterCircle(mpatches.Circle):\n", " pass" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "matplotlib.config = Config()\n", "matplotlib.config.Circle.t_color='red'\n", "matplotlib.config.CenterCircle.t_color='aqua'" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-1.0, 6.0, -1.0, 6.0)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n", "3F8FTomcYibw08gZCicU7r7AJYTZspLyNnAE7t9O8BgiY6LLyFJazM4mzHBVaI8De+K+JMKx4zOb\n", "AVwPbJrnPf8eOBF3LaEnqaYzWykt7t8Dzi3wUR8DPlyyRQvg/hCwLWHw1D/ysMeZwMG4f0JFK8VA\n", "Z7ZSmsxOISycUJXwke4DPlXSRbu6MJvYAcCJwD6EGcVy8RZh3uwrxjhntkjBqWyldJltA9wAbJ/A\n", "3tuArxOKQf+RDSXMoT2VMH92M7A2oXwzQAdhvuV5wHzc/xkrpshYqWyltIU/9t/s32rztNd7gONx\n", "fzFP+xORIqeyFQEwmwR8HvgiYcGEkWoHbiacyS7MYzIRGQdUtiIDmRnh/tAVSwOuuLS5ui7CCON5\n", "hKUBf4f7skLFFJHiorIVycZsXWAS4bPEXsJZ7Iu490TNJSJFQ2UrIiKSMN1nKyIikjCVrYiISMJU\n", "tiIiIglT2YqIiCRMZSsiIpIwla2IiEjCVLYiIiIJU9mKiIgkTGUrIiKSMJWtiIhIwlS2IiIiCVPZ\n", "ioiIJExlKyIikjCVrYiISMJUtiIiIglT2YqIiCRMZSsiIpIwla2IiEjCVLYiIiIJU9mKiIgkTGUr\n", "IiKSMJWtiIhIwlS2IiIiCVPZioiIJExlKyIikjCVrYiISMJUtiIiIglT2YqIiCRMZSsiIpIwla2I\n", "iEjCVLYiIiIJU9mKiIgkTGUrIiKSMJWtiIhIwlS2IiIiCVPZioiIJExlKyIikjCVrYiISMJUtiIi\n", "IglT2YqIiCRMZSsiIpIwla2IiEjCVLYiIiIJU9mKiIgkTGUrIiKSMJWtiIhIwlS2IiIiCVPZioiI\n", "JExlKyIikjCVrYiISMJUtiIiIgn7/9feqXaJTZSqAAAAAElFTkSuQmCC\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPConfigurable.configurable import Configurable\n", "import math\n", "\n", "class MyGenArtist(Configurable):\n", " \n", " def n_circle(self, x,y,r,n=3):\n", " pi = math.pi\n", " sin,cos = math.sin, math.cos\n", " l= []\n", " for i in range(n):\n", " l.append(mpatches.Circle( ## here Circle\n", " (x+2*r*cos(i*2*pi/n),y+2*r*sin(i*2*pi/n)),\n", " r,\n", " ec=\"none\",\n", " ))\n", " l.append(CenterCircle((x,y),r)) ## Here CenterCircle\n", " return l\n", " \n", " \n", "\n", "\n", "fig, ax = plt.subplots()\n", "patches = []\n", "patches.extend(MyGenArtist().n_circle(4,1,0.5))\n", "patches.extend(MyGenArtist().n_circle(2,4,0.5,n=6))\n", "patches.extend(MyGenArtist().n_circle(1,1,0.5,n=5))\n", "collection = PatchCollection(patches, match_original=True)\n", "ax.add_collection(collection)\n", "plt.subplots_adjust(left=0, right=1, bottom=0, top=1)\n", "plt.axis('equal')\n", "plt.axis('off')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What's next ? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This configuration system is, of course not limited to Matplotib. But to use it it should probably be better decoupled into a separated package first, independently of IPython. \n", "\n", "Also if it is ever accepted into matplotlib, there will still be a need to adapt current mechnisme to work on top of this." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bonus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This patches version of matplotlib keep track of all the `Configurable` it discovers while you use it. \n", "Here is a non exaustive list." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-------------------------\n", "Some single configurables\n", "-------------------------\n", "Annotation\n", "Arrow\n", "AxesSubplot\n", "CenterCircle\n", "Circle\n", "DrawingArea\n", "Ellipse\n", "FancyBboxPatch\n", "Figure\n", "HPacker\n", "Legend\n", "Line2D\n", "PatchCollection\n", "Rectangle\n", "RegularPolygon\n", "Spine\n", "Text\n", "TextArea\n", "VPacker\n", "Wedge\n", "XAxis\n", "XTick\n", "YAxis\n", "YTick\n", "\n", "----------------------------------\n", "Some possible nested configurables\n", "----------------------------------;\n", "AxesSubplot.Legend\n", "AxesSubplot.Text\n", "AxesSubplot.XAxis\n", "AxesSubplot.YAxis\n", "TextArea.Text\n", "XAxis.Text\n", "XTick.Text\n", "YAxis.Text\n", "YTick.Text\n" ] } ], "source": [ "from matplotlib import artist\n", "print \"-------------------------\"\n", "print \"Some single configurables\"\n", "print \"-------------------------\"\n", "for k in sorted(artist.Artist.s):\n", " print k\n", "print \"\"\n", "print \"----------------------------------\"\n", "print \"Some possible nested configurables\"\n", "print \"----------------------------------;\"\n", "for k in sorted(artist.Artist.ps):\n", " print k\n" ] } ], "metadata": { "kernelspec": { "display_name": "IPython (Python 3)", "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" } }, "nbformat": 4, "nbformat_minor": 0 }