data-science-ipython-notebooks/matplotlib/04.11-Settings-and-Styleshe...

651 lines
363 KiB
Python
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!--BOOK_INFORMATION-->\n",
"<img align=\"left\" style=\"padding-right:10px;\" src=\"figures/PDSH-cover-small.png\">\n",
"*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n",
"\n",
"*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*\n",
"\n",
"*No changes were made to the contents of this notebook from the original.*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!--NAVIGATION-->\n",
"< [Customizing Ticks](04.10-Customizing-Ticks.ipynb) | [Contents](Index.ipynb) | [Three-Dimensional Plotting in Matplotlib](04.12-Three-Dimensional-Plotting.ipynb) >"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Customizing Matplotlib: Configurations and Stylesheets"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib's default plot settings are often the subject of complaint among its users.\n",
"While much is slated to change in the 2.0 Matplotlib release in late 2016, the ability to customize default settings helps bring the package inline with your own aesthetic preferences.\n",
"\n",
"Here we'll walk through some of Matplotlib's runtime configuration (rc) options, and take a look at the newer *stylesheets* feature, which contains some nice sets of default configurations."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plot Customization by Hand\n",
"\n",
"Through this chapter, we've seen how it is possible to tweak individual plot settings to end up with something that looks a little bit nicer than the default.\n",
"It's possible to do these customizations for each individual plot.\n",
"For example, here is a fairly drab default histogram:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.style.use('classic')\n",
"import numpy as np\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nknQOM9wlqUGGuyQ1yHC
"text/plain": [
"<matplotlib.figure.Figure at 0x1023b1a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.random.randn(1000)\n",
"plt.hist(x);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can adjust this by hand to make it a much more visually pleasing plot:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nMOwlqQCGvSQVwLCXpAI
"text/plain": [
"<matplotlib.figure.Figure at 0x10c2bea20>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# use a gray background\n",
"ax = plt.axes(axisbg='#E6E6E6')\n",
"ax.set_axisbelow(True)\n",
"\n",
"# draw solid white grid lines\n",
"plt.grid(color='w', linestyle='solid')\n",
"\n",
"# hide axis spines\n",
"for spine in ax.spines.values():\n",
" spine.set_visible(False)\n",
" \n",
"# hide top and right ticks\n",
"ax.xaxis.tick_bottom()\n",
"ax.yaxis.tick_left()\n",
"\n",
"# lighten ticks and labels\n",
"ax.tick_params(colors='gray', direction='out')\n",
"for tick in ax.get_xticklabels():\n",
" tick.set_color('gray')\n",
"for tick in ax.get_yticklabels():\n",
" tick.set_color('gray')\n",
" \n",
"# control face and edge color of histogram\n",
"ax.hist(x, edgecolor='#E6E6E6', color='#EE6666');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This looks better, and you may recognize the look as inspired by the look of the R language's ggplot visualization package.\n",
"But this took a whole lot of effort!\n",
"We definitely do not want to have to do all that tweaking each time we create a plot.\n",
"Fortunately, there is a way to adjust these defaults once in a way that will work for all plots."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Changing the Defaults: ``rcParams``\n",
"\n",
"Each time Matplotlib loads, it defines a runtime configuration (rc) containing the default styles for every plot element you create.\n",
"This configuration can be adjusted at any time using the ``plt.rc`` convenience routine.\n",
"Let's see what it looks like to modify the rc parameters so that our default plot will look similar to what we did before.\n",
"\n",
"We'll start by saving a copy of the current ``rcParams`` dictionary, so we can easily reset these changes in the current session:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"IPython_default = plt.rcParams.copy()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can use the ``plt.rc`` function to change some of these settings:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from matplotlib import cycler\n",
"colors = cycler('color',\n",
" ['#EE6666', '#3388BB', '#9988DD',\n",
" '#EECC55', '#88BB44', '#FFBBBB'])\n",
"plt.rc('axes', facecolor='#E6E6E6', edgecolor='none',\n",
" axisbelow=True, grid=True, prop_cycle=colors)\n",
"plt.rc('grid', color='w', linestyle='solid')\n",
"plt.rc('xtick', direction='out', color='gray')\n",
"plt.rc('ytick', direction='out', color='gray')\n",
"plt.rc('patch', edgecolor='#E6E6E6')\n",
"plt.rc('lines', linewidth=2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With these settings defined, we can now create a plot and see our settings in action:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nFngxM78NvAQ8GxE7gTu
"text/plain": [
"<matplotlib.figure.Figure at 0x10d680da0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(x);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's see what simple line plots look like with these rc parameters:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nyMpKIr/5m4R+53eQubk
"text/plain": [
"<matplotlib.figure.Figure at 0x11004e940>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i in range(4):\n",
" plt.plot(np.random.rand(10))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I find this much more aesthetically pleasing than the default styling.\n",
"If you disagree with my aesthetic sense, the good news is that you can adjust the rc parameters to suit your own tastes!\n",
"These settings can be saved in a *.matplotlibrc* file, which you can read about in the [Matplotlib documentation](http://Matplotlib.org/users/customizing.html).\n",
"That said, I prefer to customize Matplotlib using its stylesheets instead."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Stylesheets\n",
"\n",
"The version 1.4 release of Matplotlib in August 2014 added a very convenient ``style`` module, which includes a number of new default stylesheets, as well as the ability to create and package your own styles. These stylesheets are formatted similarly to the *.matplotlibrc* files mentioned earlier, but must be named with a *.mplstyle* extension.\n",
"\n",
"Even if you don't create your own style, the stylesheets included by default are extremely useful.\n",
"The available styles are listed in ``plt.style.available``—here I'll list only the first five for brevity:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['fivethirtyeight',\n",
" 'seaborn-pastel',\n",
" 'seaborn-whitegrid',\n",
" 'ggplot',\n",
" 'grayscale']"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plt.style.available[:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The basic way to switch to a stylesheet is to call\n",
"\n",
"``` python\n",
"plt.style.use('stylename')\n",
"```\n",
"\n",
"But keep in mind that this will change the style for the rest of the session!\n",
"Alternatively, you can use the style context manager, which sets a style temporarily:\n",
"\n",
"``` python\n",
"with plt.style.context('stylename'):\n",
" make_a_plot()\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's create a function that will make two basic types of plot:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def hist_and_lines():\n",
" np.random.seed(0)\n",
" fig, ax = plt.subplots(1, 2, figsize=(11, 4))\n",
" ax[0].hist(np.random.randn(1000))\n",
" for i in range(3):\n",
" ax[1].plot(np.random.rand(10))\n",
" ax[1].legend(['a', 'b', 'c'], loc='lower left')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll use this to explore how these plots look using the various built-in styles."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Default style\n",
"\n",
"The default style is what we've been seeing so far throughout the book; we'll start with that.\n",
"First, let's reset our runtime configuration to the notebook default:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# reset rcParams\n",
"plt.rcParams.update(IPython_default);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's see how it looks:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nFEIIIexwIPUA9319H3tO7OGn/j/RPKJ5vudGh0d7NOKotUl4eeIJuOIKs14vMtL1dkqWNBnG8fHm\n1ayZ213ymZ07Ydw4WLkSlAul8vv1M9PV11xjX9+Kk9PnTrPo70VMvuHC30JKh5amVWQrVu5dSbf6\n3eztxGuvweWXu7SvpIw4CiGE8LrPN39Oq8mtaBXRit/v/b3AoBFypqpT3Asct241wc6YMTBjhskQ\ndido/KcvMWbksU8f32zH5wmtTRb1k09Cw4auXdunD3z1lUkmEp5b+NdC2tVsR1iZsEve88o6x4MH\nzQLXF1906TIJHIUQQnhNypkU+szpw8glI/nqjq94/srnKRFcotDrYsJdn6o+dcrMwsXHww03wLp1\nZoraCv/5j0mqGTzYmva8ZdYs2LfPjLy6qlo18/WbN8/6fhVHjqLfefFK4DhiBAwY4PJvEBI4CiGE\n8Ipvtn9Di3dbUL1cddbdt452Nds5fW2tCrU4nnac1PTCh7u0hjlzzLq8fftg40aTNJpXtrS7lDL7\nOn/9NSxYYF27djp61NSkfP99CA11r43+/SW72gpnM87yXeJ39Irplef7cVFx/L7vdzKynE9accnG\njfDll/Dssy5fKoGjEEIIW51MP8k9X97DoO8GMaP3DF7t/iqlQ/OpNp2PIBVEo7BGbEspeNRx2za4\n9lpTrPuTT0yQU726J73PX6VKZur73ntNgOrvBg+GW2+F9u0LP3fH0R0s/vvSTJgbboD162HPHhs6\nWIz8sOMHWkW2IqJc3qn8lUpVon7l+qw7sM76m2ttfoN49lnzTewiCRyFEELY5uedP9PinRYEBwWz\n8YGNdK3b1e22CpquPn0ahgyBuDi47jprp6ULEhdnaj/26+ffpWp+/hkWLYKxY507//PNnzPql1GX\nHC9VCm65xQTMwn1zE+Zekk19Mdumq7/5xvymc//9bl0ugaMQQgjLnck4w6PfPUq/L/rxdo+3ee/G\n9yhfsrxHbcaEXVrLUWuYO9esN9y928zAPfaY+1Ox7hg61ASNLuYYeE1amokR3nzTbJ3ojK0pW1m9\nbzXpmemXvOfYgjDQa1n6SnpmOl9t/4reTXoXeJ4tgWNGhsmMmjjR7f8kEjgKIYSw1Mq9K2k9uTVH\nzh5h4383cn2j6y1pNzo8+oLM6u3bzejiiBEmkJkxA2rUsORWLgkONtPir71mStz4m7FjoUUL+Pe/\nnb8mITkBgPUH11/yXmwspKebUV3husU7F9OsajNqlC/4mzW+TjzLdi+zdqvNd9+FqChTzd5NEjgK\nIYSwxLmscwxbPIxes3ox9sqxzOg9gyqlq1jWvmP3mNOnYdgwE8Bccw1s2GD2U/al2rXhnXegb184\nccK3fclt0yYTK7z+uvPXaK3ZemQrNze9meV7ll/yvlJmav7jjy3saDEyZ8ucf/amLkiN8jWoVKoS\nW5K3WHPjY8fg+edNCR5XCnheRAJHIYQQHvvj4B+0fb8tm5I38ccDfxS6fssdjao0ZnvyDpo0y2Ln\nTjMt/fjj3p2WLkjv3ia
"text/plain": [
"<matplotlib.figure.Figure at 0x11004ec18>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"hist_and_lines()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### FiveThiryEight style\n",
"\n",
"The ``fivethirtyeight`` style mimics the graphics found on the popular [FiveThirtyEight website](https://fivethirtyeight.com).\n",
"As you can see here, it is typified by bold colors, thick lines, and transparent axes:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nZAAHQtgDIBIMyUTMbjK
"text/plain": [
"<matplotlib.figure.Figure at 0x1101a9390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with plt.style.context('fivethirtyeight'):\n",
" hist_and_lines()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ggplot\n",
"\n",
"The ``ggplot`` package in the R language is a very popular visualization tool.\n",
"Matplotlib's ``ggplot`` style mimics the default styles from that package:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAApIAAAEECAYAAACbX9SlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xlg3GWd+PH38507992kmaRX0uZoaQutpS0C5VgEQWH9\nbX+iruByuPxcBRRUREFW2JXlsiwrKIeKrqugguvqwrIICLRAC22hSW+aNpM0zX1nzu/z+2NISdsc\ncyaT5vP6Bzr5zvf7TGYy85nP8zyfj9Jaa4QQQgghhIiSMdUDEEIIIYQQ05MEkkIIIYQQIiYSSAoh\nhBBCiJhIICmEEEIIIWIigaQQQgghhIiJBJJCCCGEECIm1okO6Ojo4KGHHqKnpwelFOeddx4XXngh\nTz/9NC+++CLZ2dkAXH755SxbtgyAZ555hpdeegmLxcKVV17J0qVLk/sohBAihT388MO88847ZGdn\nc++99456zBNPPMG2bdtwOBx86UtfYu7cuZM7SCGEiMGEGUmLxcIVV1zB/fffz1133cVzzz1HU1MT\nABdffDF33303d99999Eg0uPxsGnTJh544AFuueUWHnvsMSIpVVlXVxfnQ0kuGV98ZHzxSeXxpfLY\nIDXGt27dOm699dYxf75161aOHDnCgw8+yLXXXsujjz4a8bmn8vHJteXacm259oSBZE5OztFvxk6n\nk9LSUjo7OwFGDRC3bNnCmjVrsFgsFBUVUVJSwr59+xI24Kki44uPjC8+qTy+VB4bpMb4qqqqSE9P\nH/Pnmzdv5qyzzgKgsrKSwcFBuru7Izr3dPigkWvLteXaJ++1o1oj2draysGDB6msrATgueee4+ab\nb+aRRx5hcHAQgM7OTgoKCo7eJy8v72jgKYQQ4kSdnZ3k5+cf/be8bwohpouIA0mv18v999/PlVde\nidPp5IILLuChhx7innvuIScnhyeffDKZ4xRCCCGEEClGRdJrOxQK8f3vf5/ly5dz0UUXnfDztrY2\n7r77bu69916effZZAC699FIA7rrrLtavX380izmsrq7umLTp+vXr43ogQggxlqeeeuro/9fW1lJb\nWzvpYxj5Pnm8H//4xyxevJg1a9YAcMMNN/Dd736XnJycE46V904hxGSJ5L1zwl3bEN5x6Ha7jwki\nu7u7j77Jvfnmm5SVlQGwYsUKHnzwQS6++GI6OztpaWmhoqLihHOONqDm5uZIhjMlMjMz6evrm+ph\n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\n33wl0UOcUTY2hntrjyd
"text/plain": [
"<matplotlib.figure.Figure at 0x11006f160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with plt.style.context('ggplot'):\n",
" hist_and_lines()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### *Bayesian Methods for Hackers( style\n",
"\n",
"There is a very nice short online book called [*Probabilistic Programming and Bayesian Methods for Hackers*](http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/); it features figures created with Matplotlib, and uses a nice set of rc parameters to create a consistent and visually-appealing style throughout the book.\n",
"This style is reproduced in the ``bmh`` stylesheet:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n1QD0l9u3cNQbzfzmnGV
"text/plain": [
"<matplotlib.figure.Figure at 0x11118d128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with plt.style.context('bmh'):\n",
" hist_and_lines()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dark background\n",
"\n",
"For figures used within presentations, it is often useful to have a dark rather than light background.\n",
"The ``dark_background`` style provides this:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAo4AAAEACAYAAAA9XPfVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xlczdn/B/DXbdEqspVKJVTXlpRU9qXNWAvD2HdjHWaQ\nYbIMM3Yzg6xfhGjsCpWdVu1FdW8pUqmQskT7/f3RL1Pa7vK597a8n49Hj8fMvZ9zzjuZO+/O8j4s\nADwQQgghhBBSBxlpB0AIIYQQQhoGShwJIYQQQghfKHEkhBBCCCF8ocSREEIIIYTwhRJHQgghhBDC\nF0ocCSGEEEIIX+pMHLW1tXH37l08ffoUMTExWLJkCQDAxcUFqampCA8PR3h4OOzs7L62cXZ2RkJC\nAuLi4mBjYyO+6AkhpAE4duwYMjMzER0dXeMzf//9NxISEhAZGQkTExMJRkcIIYLh1faloaHBMzEx\n4QHgqaio8DgcDs/IyIjn4uLCW7FiRZXnjY2NeRERETxZWVmenp4eLzExsdb+6Yu+6Iu+GvtXv379\neCYmJrzo6Ohq37e3t+ddv36dB4BnYWHBCwoKknrM9EVf9EVf1X3VOeOYlZX19bfkvLw8xMfHQ1tb\nGwDAYrGqPD9mzBh4eHigpKQEKSkpSExMhIWFRV3DEEJIoxUQEICcnJwa3x8zZgxOnToFAAgJCUGL\nFi3Qrl07SYVHCCF8E2iPo56eHnr16oXHjx8DAJYsWYLIyEgcPXoUampqAMqWtlNTU7+2SU9P/5po\nEkIIqYo+NwkhDQXfiaOKigouXryI5cuXIy8vD66urjAwMICpqSkyMzOxe/duccZJCCGEEEKkTI6f\nh2RlZXHx4kWcPn0anp6eAIC3b99+ff/o0aPw8vICUPabcocOHb6+p6Ojg/T09Cp98ng8kQInhJCa\nVLeNpj4r/9wMCgoCUPPnJkCfnYQQ8eH3s7POjZBubm683bt3V3pNQ0Pj6z//9NNPPHd3dx4AHpvN\n5kVERPDk5eV5+vr6NR6O4ZV9+tXbrw0bNkg9BoqP4quPX/U5NqD+frbo6enxYmJiqn3PwcHh6+GY\nvn371no4RprfnzR/9jS25L5k5eV5q66e5d1NjOOxWKwm83039bH5/Wypc8bR2toaU6ZMwZMnTxAR\nEQEej4dff/0VP/zwA3r16oXS0lK8ePECCxYsAADEx8fj/PnziIuLQ1FRERYtWlTXEIQQ0qi5u7tj\n8ODBaN26NVJSUrBhwwY0a9YMPB4PR48ehbe3N0aMGIHExETk5eVh1qxZ0g6ZNGFDZk9F9ss0FBt2\nQ0ezXkgOi5R2SKQeqTNxDAwMhJxc1cd8fX1rbLNt2zZs27ZNtMgIIaSRmDJlSp3PLF26VAKREFK7\ntvq6GPDDBOydOBMDOhjAfJQDJY4SMmXKYDg4mGHTJmlHUju6OaYGDx48kHYItaL4REPxCa8+x0bE\nS5o/expb/FgsFiZscMbtw8eRm/UaF06eQo9hgyCnoCCxGMo1lT/ziqZNHwpdvfqflrFQtmYtcTwe\nr8FtYCeE1H+N/bOlsX9/RHosxo2C5fgx2DdtPnilpQCA+Yf2IuTqDUT53JFydI1bq1bNkfz8GIqK\nimHaaznS0t7W3Yhh/H621P/UlhBCCJESDQN96PboKu0wxE61tTpGLF+IC5v+/Jo0AkCYlzfMRztI\nMbKmYfRoC9y+HYWHD59iwIBu0g6nVpQ4EkIIqddkZWWgpCTZ5VIFFWWM+mUpFp1wxex9O6GupSnR\n8SVt7OqfEHLlOjISkiq9/vTeI+iZdEfz1q2kFFnT4DS+Hy5dDIC/XxwGDKjfv6hQ4kgIIaTe6tFD\nH6Fhe3HwkOQqdJg62GDNNQ8oq6lh57gpeHDCHVO3b4aMrKzEYpAk4wFW6NC9K24dOl7lvcIv+Yi9\n7wfTEbZSiKxpaNFCBQMGdMONG6Hw84tFf5pxJER6UtPTwePxxPKVWkOBZkKI6GRlZeDsPB537m7B\nvbvR6N5dT+xjahjo48f/7ceQWVNx6ud1+NdlKz69y8HDU+dQkJcH2x/niD0GSWumpASndatw8fcd\nKC4oqPaZME9vmI+i5WpxGTXKAvfvx+Djxy+IikqGrm5btGrVXNph1Yivm2MIaah0tLSw52mwWPpe\n2d1SLP0S0tR16aKFk24r8PlzAfqYr8C7d5/waoE9WCyWWG7OUVBWhs3C2egzZgRuHTqOoPNXUFpS\n8vV9Ho+Hc+t+x8oLbkgIDm1U5WnsFs9FUlgkEoNDa3wmKTQCyi3VoNmlEzITk2p8jgjH0ckaly8F\nAgBKSkoRHMxF//5d4en5WGIxsI178v0szTgSQgipF1gsFpYuHYWAwJ046/4Atja/4eXLN/j06Qve\nv/8MHZ02jI/Zy24YVnueg2qrltjpOAUB5y5WShrLfcx+h383/IEf/nCBcgs1xuOQBp2uRjAbaQ+v\nXf/U+hyPx0PEjVswH2kvociaDlVVJQwd2hNeXiFfX/P3i5X4AZkli9bx/SwljoQQQqROV7ctbt/5\nHZMmD0Q/61U4cOBGpdlFDicNxsY6jI3XrqMeFh7dh2HzZuDMqt/gsX4LPmXn1NqG4xeEmDsPMHHT\nr4zFIS0ysrKYsGEtvHbvR17u+zqfD/fyRu+RdmDJUNrApO++M4e/fxxyc/O+vla2z1FyB2SGDB4B\nOVn+F6DpbwAhhBCpmjVrOELD9uKWbyQG9F+DxMRXVZ7hctJgZKQt8ljNlJQwcsViLD55EE/vP8Le\n72fheWQM3+1v7HVFK632sJowTuRYpGnAlIn4/OEDwr28+Xo+K/kF3r9+gy59zcUcWdNSfpq6oseP\nE9C9ux6UlcVfSaBZMwXMn/MzXA/zf9sfJY6EEEKkQlNTHdc8f8PSZaMwbOg67NhxCaUVaghWxOWm\nizzjaGI3DGs8z6F5m9bY5TgV/mcvVLssXZuSoiKcWeMC+yXzoNGpo0jxSEsr7fYYNnc6Lm7eIVC7\ncC8fmI2i5WqmKCsrwMamF65dq7yXMT+/EFFRybC0NBJ7DOMdZyDhWRyiY2re4/otShwJIYRI3IQJ\n/REZ9Teio5LR1+JnPH2aUuvzHE4ajIRMHNt11MOCI39j+PyZcHfeiHPrNuNj9juh+gKA189TcOOv\ng5i283epXMcnKsf1q/DA7SyyU9MEahflcwfdBvWHgrKymCJrWuztzRASkoB37z5Wea+snqN49zmq\nq7fBxPGzcfjoToHaUeJICCFEYlq1ao6z51Zh46YfMHrU73BxcUdRUXGd7ThCLFU3U1LCdz/9iMUn\nDyLuYQD2TpyJ5PAoYUOvJOSKF7KSX2DUz0sY6U9STB1s0KJdWzxwOytw20/vcpAcHoUewwczH1gT\n5DTeGpcuBlb7niTqOc6esQy+t6/g1auXArWjxJEQQohEjBhhjuiYfcjMyIFZ758QGprId9u0tLdo\n2VIFqqpKfD3f02YIVl87C7V2bbHLaRr83M8LvCxdlwubtqHrwH7oNrg/o/2Ki5KaGkavWoYLG/9E\nabFwfxZhXt60XM0ARcVmcHAww9Wr1ZeLCwiIh4VFF8jJiafovEFHI1hbD8OpM64Ct6XEkRBCiFg1\nb66EY8eWYt/+hZg6ZRdWrjyG/PxCgfrg8XhITHxV56xjW31dzD/8F2x/nIOzazfh3K+b8fFttijh\n1yj/4ye4O2/EhI1rodaurVjGYNKon5cg+tY9vHwSV+ezBgaaGDq0am2/uIcB0DY2REuNduIIscmw\ntTVFVNRzvH6dW+3779/nITk5C717dxLL+IsWOuO0uyvy8qouk9eFEkdCCCFiM3hwD0TH7ENJSSlM\nei7Fw4dPhe6rtuXqZkqKGLH8Ryw9dRgc/2DsmTiDsWXp2ryIioH/uYv44Q+Xel2qplOf3jC06gPv\nfw7z9fzEif2xYeMPVV4vLixEzO376D3SjukQmxRHJ+sqp6m/Ja56jpZ9B6NNGw14Xf9XqPb19285\nIYSQBktJSQF//TUPp06
"text/plain": [
"<matplotlib.figure.Figure at 0x1114bef28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with plt.style.context('dark_background'):\n",
" hist_and_lines()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Grayscale\n",
"\n",
"Sometimes you might find yourself preparing figures for a print publication that does not accept color figures.\n",
"For this, the ``grayscale`` style, shown here, can be very useful:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nJIQQwrjW1lZ89913+Pr
"text/plain": [
"<matplotlib.figure.Figure at 0x1114beef0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with plt.style.context('grayscale'):\n",
" hist_and_lines()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Seaborn style\n",
"\n",
"Matplotlib also has stylesheets inspired by the Seaborn library (discussed more fully in [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb)).\n",
"As we will see, these styles are loaded automatically when Seaborn is imported into a notebook.\n",
"I've found these settings to be very nice, and tend to use them as defaults in my own data exploration."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n2RbMTfYQRHj1KLAW45E
"text/plain": [
"<matplotlib.figure.Figure at 0x111a0f278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn\n",
"hist_and_lines()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With all of these built-in options for various plot styles, Matplotlib becomes much more useful for both interactive visualization and creation of figures for publication.\n",
"Throughout this book, I will generally use one or more of these style conventions when creating plots."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!--NAVIGATION-->\n",
"< [Customizing Ticks](04.10-Customizing-Ticks.ipynb) | [Contents](Index.ipynb) | [Three-Dimensional Plotting in Matplotlib](04.12-Three-Dimensional-Plotting.ipynb) >"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3",
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}