{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "# Color palette with python\n", "\n", "##### Germain Salvato Vallverdu [germain.vallverdu@univ-pau.fr](germain.vallverdu@univ-pau.fr)\n", "\n", "This notebook aims to present several ways to manage color palette with python, mainly for plot purpose.\n", "\n", "## Import some packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "from IPython.display import HTML # intégration notebook\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "## Functions\n", "\n", "Define convenient functions to plot a matplotlib colormap or a list of colors with matplotlib.\n", "\n", "[See this gist](https://gist.github.com/gVallverdu/ac3efecfc640cc9e107f1f7cbfb11bb4)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def plot_cmap(cmap, ncolor=6):\n", " \"\"\" \n", " A convenient function to plot colors of a matplotlib cmap\n", " \n", " Args:\n", " ncolor (int): number of color to show\n", " cmap: a cmap object or a matplotlib color name\n", " \"\"\"\n", " \n", " if isinstance(cmap, str):\n", " try:\n", " cm = plt.get_cmap(cmap)\n", " except ValueError:\n", " print(\"WARNINGS :\", cmap, \" is not a known colormap\")\n", " cm = plt.cm.gray\n", " else:\n", " cm = cmap\n", " \n", " with plt.rc_context(plt.rcParamsDefault):\n", " fig = plt.figure(figsize=(6, 1), frameon=False)\n", " ax = fig.add_subplot(111)\n", " ax.pcolor(np.linspace(1, ncolor, ncolor).reshape(1, ncolor), cmap=cm)\n", " ax.set_title(cm.name)\n", " xt = ax.set_xticks([])\n", " yt = ax.set_yticks([])\n", " return fig" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def show_colors(colors):\n", " \"\"\"\n", " Draw a square for each color contained in the colors list\n", " given in argument.\n", " \"\"\"\n", " with plt.rc_context(plt.rcParamsDefault):\n", " fig = plt.figure(figsize=(6, 1), frameon=False)\n", " ax = fig.add_subplot(111)\n", " for x, color in enumerate(colors):\n", " ax.add_patch(\n", " mpl.patches.Rectangle(\n", " (x, 0), 1, 1, facecolor=color\n", " )\n", " )\n", " ax.set_xlim((0, len(colors)))\n", " ax.set_ylim((0, 1))\n", " ax.set_xticks([])\n", " ax.set_yticks([])\n", " ax.set_aspect(\"equal\")\n", " \n", " return fig" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Color models\n", "\n", "### How to define a color ?\n", "\n", "* RGB : Red Green Blue, additive color model\n", "* HSL : Hue Saturation Light\n", "* CMYK- : Cyan Magenta Yellow Black, soustractive color model\n", "\n", "## RGB\n", "\n", "### Red Green Blue\n", "\n", "* an additive color model\n", "* set \"the amount\" of a each based color\n", "* each color is defined by un nombre between 0 and 255 (8 bits = 1 octet)\n", "\n", "![additive](img/additive.png)\n", "\n", "* red (255, 0, 0)\n", "* green (0, 255, 0)\n", "* blue (0, 0, 255)\n", "\n", "### HTML color codes\n", "\n", "HTML color codes are another way to define a RGB color using an hexadecimal numeral system.\n", "\n", "* HTML color starts with a # character\n", "* the folowing 6 characters defines the intensity of red, green and blue colors\n", "* each pair correspond to a number in hexadecimal numeral system from 0 to FF (255)\n", "\n", "example : `#2D85C9` <-> (48, 133, 201)\n", "\n", "* 2D -> 48\n", "* 85 -> 133\n", "* C9 -> 201\n", "\n", "### RGB and RGBA\n", "\n", "* extension of RGB model\n", "* a for `alpha` (canal alpha)\n", "* RGBA = RGB + opacity\n", "* opicty is defined between 0 (transparent) and 1 (opaque)\n", "\n", "![rgba](img/rgba.png)\n", "\n", "## HSL\n", "\n", "### Hue, staturation, light\n", "\n", "* Closer to the human perception of the color than RGB model\n", "* Hue is define on a wheel from an angle between 0 and 360°\n", "* Saturation and light are defined between 0 et 100%\n", "\n", "![](img/tsl.png)\n", "\n", "## CYMK\n", "\n", "### Cyan Yellow Magenta Black\n", "\n", "* Based on a substractive color model\n", "* Used by printers\n", "\n", "![synthèse soustractive](img/soustractive.png)\n", "\n", "## Several kinds of palette\n", "\n", "* qualitative palettes\n", "* sequential palettes\n", "* divergentes palettes\n", "\n", "## Qualitatives palettes\n", "\n", "* Used to distinguish several groups of data without order or relationship\n", "\n", "### Example" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_cmap(\"Dark2\", 4)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "plot_cmap(\"Dark2\", 4).savefig(\"img/qualitative.png\", bbox_inches=\"tight\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Sequential palettes\n", "\n", "* Color scale \n", "* Use it if there is an order between the data\n", "\n", "### Example" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\nGvgPQsQ4y5BVoI8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_cmap(\"Blues\", 8)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "plot_cmap(\"Blues\", 8).savefig(\"img/sequentielle.png\", bbox_inches=\"tight\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Reverse order\n", "\n", "In matplotlib all palettes suffixed by `_r` are reversed." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\nABr4N1gjOv+wJGynAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_cmap(\"Blues_r\", 8)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "plot_cmap(\"Blues_r\", 8).savefig(\"img/sequentielle_r.png\", bbox_inches=\"tight\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Divergent palettes\n", "\n", "* Usefull if there is a central value which play a specific role\n", "* values disposed around zero\n", "\n", "### Example" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_cmap(\"coolwarm\", 9)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "plot_cmap(\"coolwarm\", 9).savefig(\"img/divergente.png\", bbox_inches=\"tight\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Build a custum color palette\n", "\n", "### some tools\n", "\n", "* [matplotlib colormaps](http://matplotlib.org/users/colormaps.html)\n", "* [seaborn palettes](http://seaborn.pydata.org/tutorial/color_palettes.html)\n", "* [colorlover palettes](https://github.com/jackparmer/colorlover)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## With matplotlib\n", "\n", "[matplotlib colormaps](http://matplotlib.org/users/colormaps.html)\n", "\n", "* matplotlib *colormaps* are in `matplotlib.cm` module\n", "* `colormap` allows to map values on a color scale\n", "\n", "### Example colormap `summer`" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\n/wFlKiRM/PiZ4gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_cmap(plt.cm.summer, 6)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "plot_cmap(plt.cm.summer, 6).savefig(\"img/summer.png\", bbox_inches=\"tight\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "`colormap` returns a `rgba` color." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "(0.16470588235294117, 0.58235294117647063, 0.40000000000000002, 1.0)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plt.cm.summer(X=42)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* X is a float number or a list or an array \n", "* X must be between 0 and `plt.cm.colormap.N`\n", "* You can define opacity" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Max val = 256\n", "[[ 0.00392157 0.50196078 0.4 0.6 ]\n", " [ 0.19607843 0.59803922 0.4 0.6 ]\n", " [ 0.39215686 0.69607843 0.4 0.6 ]\n", " [ 0.78431373 0.89215686 0.4 0.6 ]]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVMAAABkCAYAAAA7Q9PVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAAs5JREFUeJzt2bGL03ccxvEn4nC7i0OhKUWOdGo7CErB0uXIn1CdunX0\nL3I7FycncflBl4JV6uAQckszSuEoXfTA4dfh1C3X6D0So6/Xmi/h4TO8h2QyjmMAOJ8L2x4A8CkQ\nU4ACMQUoEFOAAjEFKBBTgAIxBSgQU4CCi5s8mkwml5IcJFklOfmQgwA+MntJpkkejuN4vO7RRjHN\naUgPC6MAdtWtJHfXfbhpTFdJMpv/lMuz/cKmz8vzxTKLB0Ou/TzPF19Ptz1n56yeLfP4/pD5L/N8\neWW67Tk75+jpMsO9Ib/enmd/Nt32nJ3z5NEyh3eG5HUH19k0pidJcnm2nys/Xj/fss/U4sGQr76f\n5Zur3217yk56fH/I7Oos315zv/cx3Bty/cYsP9xwv/fxOqZn/sTpDyiAAjEFKBBTgAIxBSgQU4AC\nMQUoEFOAAjEFKBBTgAIxBSgQU4ACMQUoEFOAAjEFKBBTgAIxBSgQU4ACMQUoEFOAAjEFKBBTgAIx\nBSgQU4ACMQUoEFOAAjEFKBBTgAIxBSgQU4ACMQUoEFOAAjEFKBBTgAIxBSgQU4ACMQUoEFOAAjEF\nKBBTgAIxBSgQU4ACMQUoEFOAAjEFKBBTgAIxBSgQU4ACMQUoEFOAAjEFKBBTgAIxBSgQU4ACMQUo\nEFOAAjEFKBBTgAIxBSgQU4ACMQUoEFOAAjEFKBBTgAIxBSgQU4ACMQUoEFOAAjEFKBBTgAIxBSgQ\nU4ACMQUoEFOAAjEFKBBTgAIxBSi4uOG7vSR5vlh+wCmfrjd3++vPRV79+3LLa3bP6tnp/RZ/LPLi\nH/d7V0dPT+/3+2+LHP/tfu/qyaO33ds7691kHMf//bLJZHIzyeH5ZwHsrFvjON5d9+GmMb2U5CDJ\nKslJbRrAx28vyTTJw3Ecj9c92iimAJzNH1AABWIKUCCmAAViClAgpgAFYgpQIKYABf8BQRVnNf6M\nq9MAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Max val = \", plt.cm.summer.N)\n", "palette = plt.cm.summer(X=[1, 50, 100, 200], alpha=.6)\n", "print(palette)\n", "show_colors(palette)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "show_colors(palette).savefig(\"img/mpl_palette1.png\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "* You can change interval values using `Normalize`" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.09803922 0.54901961 0.4 1. ]\n", " [ 0.29803922 0.64901961 0.4 1. ]\n", " [ 0.50196078 0.75098039 0.4 1. ]\n", " [ 0.70196078 0.85098039 0.4 1. ]\n", " [ 0.90196078 0.95098039 0.4 1. ]]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAABkCAYAAAArD19MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAAxdJREFUeJzt2r9r3HUcx/HXSaEpIiL1R5USG7AFEaRoBp2ki/0LXKyT\n/4Cjk/+Ji0PbvUupFMSpGdIidPhiizSeCCcYXISm09ch1e3qXZrwIsnjsd6H481reQ53k3EcAwBN\nL7QPAAAxAqBOjACoEyMA6sQIgDoxAqBOjACoEyMA6k4s8mgymZxOcjnJVpKdgzwIgCNlJcm5JLfG\ncdye92ihGGU3RFf34SgAjqcrSa7N+3DRGG0lyamP383JtTP7cNPx8uTRLI/vDLnw2XpefO2l9jmH\nzvaDWaa3h1z6cj2vvGm/ZU3vz7J5Y8gXX63n9bP2W9Zwb5ab14d8/c16zr5tv2Vtbszy3bdD8rQj\n8ywao50kObl2Jqc+OP98lx1Tj+8MeePial5ee7V9yqE0vT3k/EereeuC/fZi88aQDz9ZzTvv2W8v\nbl4fcunT1bx/0X578TRGz/yJxx8YAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDq\nxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgT\nIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6M\nAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjEC\noE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiAOjECoE6MAKgTIwDqxAiA\nOjECoE6MAKgTIwDqxAiAOjECoO7Egu9WkuTJo9kBnnJ0/bvbHz9N8/fvf5WvOXy2H+zu93Bjmj9/\ntd+ypvd397v74zS//WK/ZQ33dvf74ftpHv5sv2VtbvzXjZVnvZuM4/i/XzaZTD5PcvX5zwLgmLoy\njuO1eR8uGqPTSS4n2Uqys2+nAXDUrSQ5l+TWOI7b8x4tFCMAOEj+wABAnRgBUCdGANSJEQB1YgRA\nnRgBUCdGANT9AzYfd9AVxQrJAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "normalize = mpl.colors.Normalize(vmin=-5, vmax=5)\n", "palette = plt.cm.summer(X=normalize([-4, -2, 0, 2, 4]), alpha=1)\n", "print(palette)\n", "show_colors(palette)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "show_colors(palette).savefig(\"img/mpl_palette2.png\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## With colorlover" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import colorlover as cl" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "[Colorlover](https://github.com/jackparmer/colorlover) provides function to set up a color palette\n", "\n", "```py\n", "import colorlover as cl\n", "```\n", "\n", "* `cl.colorsys` : conversion between color models\n", "* `cl.scales` : color palette\n", "* `cl.to_HTML` : help function to show the palette\n", "\n", "`cl.scales` has to be used following :\n", "\n", "```py\n", "cl.scales[\"number\"][\"type\"][\"name\"]\n", "```\n", "\n", "where\n", "\n", "* `number` is a number between 3 and 12 included\n", "* `type` is : `div`, `seq` or `qual`\n", "* `name` is the palette name\n", "\n", "All palettes are not available for all combinations.\n", "\n", "For example, this is divergent palettes with 4 colors. You have to use `cl.to_html` to get an html version and `HTML()` to ask the notebook to display the html code and show the palette." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
BrBG
PiYG
RdYlBu
RdGy
RdBu
PuOr
PRGn
RdYlGn
Spectral
" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HTML(cl.to_html(cl.scales[\"4\"][\"div\"]))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Divergent color palette `PuOr` with 4 colors :" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "['rgb(230,97,1)', 'rgb(253,184,99)', 'rgb(178,171,210)', 'rgb(94,60,153)']" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cl.scales[\"4\"][\"div\"][\"PuOr\"]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### conversion in RGB triplets\n", "\n", "In order to use this palette with matplotlib you have to convert it in true RGB triplets." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "[(230.0, 97.0, 1.0),\n", " (253.0, 184.0, 99.0),\n", " (178.0, 171.0, 210.0),\n", " (94.0, 60.0, 153.0)]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cl.to_numeric(cl.scales[\"4\"][\"div\"][\"PuOr\"])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## With seaborn" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "The documentation is really clear and provides a nice tutorial [seaborn color palettes](http://seaborn.pydata.org/tutorial/color_palettes.html). The following juste provides simple exampl cases.\n", "\n", "```py\n", "import seaborn as sns\n", "```\n", "\n", "seaborn provides several functions in order to build and show color palettes. For example, in order to show the current palette :" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAABhCAYAAAAHpNImAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAAtFJREFUeJzt3L9L1HEcx/H3hZChTqKGutTS1tDm39FYmzRL9G8U0Rxt\nNrb2L7SEQVuDCnaKP5BIPe62a+mGljwL+76+1+Ox3PLhePGBL8/jDq4zHA6HBQA06kbTAwAAQQaA\nCIIMAAEEGQACCDIABBBkAAggyAAQQJABIIAgA0CAsYPsD70A4M88eb916Zmpcd+s0+nU882P1T2+\n+KtR/5M7a9u1sbZerz68qYPzo6bntMLy3FJtrK3Xlxcvq9/db3pOa9xaXal7z57Wu82tOvWMjmV+\ncbYePn5QO5/f1qB30vSc1pieWai79x/V60+7ddgbND1noowd5Kqq7vFFbe9/v64tE+fmzwgfnB/V\n7revDa9pl353v3o7u03PaJ3T44s69IxeyaB3Uv1zH/6u6rA3qL2zftMzJorfkAEggCADQABBBoAA\nggwAAQQZAAIIMgAEEGQACCDIABBAkAEggCADQABBBoAAggwAAQQZAAIIMgAEEGQACCDIABBAkAEg\ngCADQABBBoAAggwAAQQZAAIIMgAEEGQACCDIABBAkAEggCADQABBBoAAggwAAQQZAAIIMgAEEGQA\nCCDIABBAkAEggCADQABBBoAAggwAAQQZAAIIMgAEEGQACCDIABBAkAEggCADQABBBoAAggwAAQQZ\nAAIIMgAEEGQACCDIABBAkAEggCADQABBBoAAggwAAQQZAAIIMgAEEGQACCDIABBAkAEggCADQABB\nBoAAggwAAQQZAAIIMgAEEGQACCDIABBAkAEggCADQABBBoAAggwAAQQZAAIIMgAEEGQACCDIABBA\nkAEgwNRVDq8uzl7Xjom0PLf0yyuXG93VrdWVhpe0y+i+5j2jYxvd1fTMQsNL2mV0X7dnphte0i57\nZ/1Lz3SGw+HwH2wBAH7DV9YAEECQASCAIANAAEEGgACCDAABBBkAAggyAAQQZAAIIMgAEOAHSU5Z\n+3pLYMAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "current_palette = sns.color_palette()\n", "sns.palplot(current_palette)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### A qualitative palette" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAABhCAYAAABGShAtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAA2dJREFUeJzt3bFqW3cYxuHvlBR3iEXiIbiTlLFzoEPxmiW9i9KrSEKH\n0voeCt16B4Vm6Wo6FLqnGVrJFJw4QXbklEQJ+HQwGjpFDjj/HL/Ps2g5iJdv+iEJ1PV93xcAADE+\naj0AAID3SwACAIQRgAAAYQQgAEAYAQgAEEYAAgCEEYAAAGEEIABAGAEIABBm7QD0hyEAAB+2f7/6\na63nrqz7hl3X1fKnn6s/nL/zqDQHnz2qm3d26+8Hd2t5NG09ZxA2rk/q5p3d+nXvbh0vpq3nDMa1\n0aRu7+zWvT9+rOmLx63nDMLk6nZ9f+vruv/7Xs1OFq3nDMZ4c1Tffb5T3/w2q9nJsvWcQRhvbtS3\nX4xr75dXtZj7MGVdo62udr78pF798KT6gzet51w6awdgVVV/OK/+nycXteXSWW5Pz16PpvXy6cO2\nYwbmeDGtZ3M3O6/pi8f18Pl+6xmDMjtZ1J/HR61nDM7sZFmPjl62njEoi3lf88PT1jMG5OxLyv7g\nTZ3uv2685fLxG0AAgDACEAAgjAAEAAgjAAEAwghAAIAwAhAAIIwABAAIIwABAMIIQACAMAIQACCM\nAAQACCMAAQDCCEAAgDACEAAgjAAEAAgjAAEAwghAAIAwAhAAIIwABAAIIwABAMIIQACAMAIQACCM\nAAQACCMAAQDCCEAAgDACEAAgjAAEAAgjAAEAwghAAIAwAhAAIIwABAAIIwABAMIIQACAMAIQACCM\nAAQACCMAAQDCCEAAgDACEAAgjAAEAAgjAAEAwghAAIAwAhAAIIwABAAIIwABAMIIQACAMAIQACCM\nAAQACCMAAQDCCEAAgDACEAAgjAAEAAgjAAEAwghAAIAwAhAAIIwABAAIIwABAMIIQACAMAIQACCM\nAAQACCMAAQDCCEAAgDACEAAgjAAEAAgjAAEAwghAAIAwAhAAIIwABAAIIwABAMIIQACAMAIQACCM\nAAQACCMAAQDCCEAAgDBXzvNwd2PronZcShvXJ/975e1Wt7o2mjTdMTSre02ubrcdMiCrW403R42X\nDMvqXuPNjcZLhmN1q9FWVz53Wd/Zvaq6Tz92tXM43X+91nNd3/f9BW8BAOADIqoBAMIIQACAMAIQ\nACCMAAQACCMAAQDCCEAAgDACEAAgjAAEAAgjAAEAwvwHlR1zq7nZ1dEAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.palplot(sns.color_palette(\"husl\", 8))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### A sequential palette" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUoAAABhCAYAAACwNehEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAAgNJREFUeJzt28FpG1EUQNE/sjBoYwKpIV2ku/STKtJFGvDGOBgHgZFm\nsoi9DFcKFoqUc9af4fFg7h8EmpZlWQYAf7Q69wAA/zqhBAhCCRCEEiAIJUAQSoAglABBKAGCUAKE\ng0PpDzzAtXn88njQufWhD5ymaex+7MbY//VM/5+bMdYf1uPl+8tYti6aQ0ybadx+uh3bb9sxP83n\nHudirO5WY/N5M56/Po/5wd7e28GhHGP8juTuNINcs2W7jOWnUB5jfprH/OiFP9b8MI/9va+Z9+Y3\nSoAglABBKAGCUAIEoQQIQgkQhBIgCCVAEEqAIJQAQSgBglACBKEECEIJEIQSIAglQBBKgCCUAEEo\nAYJQAgShBAhCCRCEEiAIJUAQSoAglABBKAGCUAIEoQQIQgkQhBIgCCVAEEqAIJQAQSgBglACBKEE\nCEIJEIQSIAglQBBKgCCUAEEoAYJQAgShBAhCCRCEEiAIJUAQSoAglABBKAGCUAIEoQQIQgkQhBIg\nCCVAEEqAIJQAQSgBglACBKEECEIJEIQSIAglQBBKgCCUAEEoAYJQAgShBAhCCRCEEiAIJUAQSoCw\nPur0zYmmuFav+5o203nnuCBvu1rducOP8bav1Ud7O8b+fn/QuWlZluXEswBcNNcPQBBKgCCUAEEo\nAYJQAgShBAhCCRCEEiAIJUD4Bb+NOl2fY/3vAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.palplot(sns.light_palette(\"violet\", 4))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "#### A divergente palette" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZcAAABhCAYAAAAa2uy9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAAoFJREFUeJzt2zFqFGEcxuH/DkmxKcIGgoVFrOw8gVhZ5AKCtxELT+BB\nvEAKGz2CICRFSIoIurJLMDtgYMZq6yT6xmE2z1N/DC9f8xsYZtL3fV8AENQMPQCAzSMuAMSJCwBx\n4gJAnLgAECcuAMSJCwBx4gJAnLgAEHfruPiRH4Cqqk+vn994Zuu2D5tMJvXuw1Gdzxf/NOohOdjf\nqzevDuvjl5Nartqh54zCbGdaL589rbZtq+u6oeeMRtM0NZ1O6/vno7q+XA49ZxS2d2f16MVhfX3/\nttqLs6HnbJxbx6Wq6ny+qJNvP+5ry8Zartr6+Ws19IxR6bpOXP7C9eWyfi/mQ88YlfbirK5Oj4ee\nsXF8cwEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMX\nAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwA\niBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEg\nTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4\ncQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgTlwAiBMXAOLEBYA4cQEgbusuhw/29+5r\nx0Za39dsZzrwkvFY31XTeO+5i/V9be/OBl4yHuu7mj5+MvCS8bk6Pb7xzKTv+/4/bAHgAfF6CECc\nuAAQJy4AxIkLAHHiAkCcuAAQJy4AxIkLAHHiAkDcH6d6SfXhS5j6AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.palplot(sns.diverging_palette(220, 20, n=5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Enjoy !\n", "\n", "Germain" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }