Files
jupyter-collection/scientific-computing-1/Lecture-4-Matplotlib.ipynb

4676 lines
1.6 MiB
Plaintext
Raw Normal View History

2025-10-21 11:20:44 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# matplotlib - 2D and 3D plotting in Python"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"J.R. Johansson (jrjohansson at gmail.com)\n",
"\n",
"The latest version of this [IPython notebook](http://ipython.org/notebook.html) lecture is available at [http://github.com/jrjohansson/scientific-python-lectures](http://github.com/jrjohansson/scientific-python-lectures).\n",
"\n",
"The other notebooks in this lecture series are indexed at [http://jrjohansson.github.io](http://jrjohansson.github.io)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# This line configures matplotlib to show figures embedded in the notebook, \n",
"# instead of opening a new window for each figure. More about that later. \n",
"# If you are using an old version of IPython, try using '%pylab inline' instead.\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib is an excellent 2D and 3D graphics library for generating scientific figures. Some of the many advantages of this library include:\n",
"\n",
"* Easy to get started\n",
"* Support for $\\LaTeX$ formatted labels and texts\n",
"* Great control of every element in a figure, including figure size and DPI. \n",
"* High-quality output in many formats, including PNG, PDF, SVG, EPS, and PGF.\n",
"* GUI for interactively exploring figures *and* support for headless generation of figure files (useful for batch jobs).\n",
"\n",
"One of the key features of matplotlib that I would like to emphasize, and that I think makes matplotlib highly suitable for generating figures for scientific publications is that all aspects of the figure can be controlled *programmatically*. This is important for reproducibility and convenient when one needs to regenerate the figure with updated data or change its appearance. \n",
"\n",
"More information at the Matplotlib web page: http://matplotlib.org/"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To get started using Matplotlib in a Python program, either include the symbols from the `pylab` module (the easy way):"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from pylab import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"or import the `matplotlib.pyplot` module under the name `plt` (the tidy way):"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import matplotlib\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## MATLAB-like API"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The easiest way to get started with plotting using matplotlib is often to use the MATLAB-like API provided by matplotlib. \n",
"\n",
"It is designed to be compatible with MATLAB's plotting functions, so it is easy to get started with if you are familiar with MATLAB.\n",
"\n",
"To use this API from matplotlib, we need to include the symbols in the `pylab` module: "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from pylab import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A simple figure with MATLAB-like plotting API:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x = np.linspace(0, 5, 10)\n",
"y = x ** 2"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEZCAYAAACervI0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAGdBJREFUeJzt3Xu0lXWd+PH3B7xfR5vUUrTMrPw1SjlpiubJ8lJqeBlNx5Hy15AzK9JxrRydzGAcXWo3tVrmXUETUUsZNRNdejQUEkmDStL6KZQheUnxkqjw+f3xbOLiAfbBs/fz7P28X2vtxT777IfzYQPfz/f2+T6RmUiS6mdQ2QFIksphApCkmjIBSFJNmQAkqaZMAJJUUyYASaopE4C0AhExJCLmR0Ss5D2LImLbdsYlDRQTgLSUiHg8IvYGyMw/ZOZG2SiWiYi7I+L/LneJhTTqWCYA6a1Z4ehAqjoTgNQQEeOArYFbGlM/JzWmeAZFxBnAnsD3G9/7bh/XrxUR34qI2RExNyIuiIi12/3nkJplApAaMnMEMAc4IDM3Aq6jMcWTmV8DfgaMakwLHd/Hb3EOsB2wY+PXLYGvtyN2aXWYAKQ3W91pnZHAiZn5Qma+DJwNHDVwYUkDa42yA5C6QUS8HVgPmL7UpqFBuEagCjMBSMta2a6elX3vGeAV4P9k5tyBDUlqDaeApGU9BSze1x8s24Oft9T3ltHYKnoJcF5jNEBEbBkR+7YwVuktMQFIyzobOC0ingMOY9le//nA4RHxbESc13ht6e+fDPwOmBoRzwOTgO3bELO0WqKVN4SJiK2AccDmwCLg4sz8XkSMplgw+3PjrV/NzJ+2LBBJ0pu0OgFsAWyRmQ9HxAbAdGA48Fngxcz8Tst+uCRppVq6CJyZT1HMqZKZL0XEIxR7o8HdEZJUqratAUTEu4ChwM8bL42KiIcj4tKI2LhdcUiSCm1JAI3pnxuAEzLzJeACYNvMHEoxQnAqSJLarKVrAAARsQZwC3BbZp7fx/e3AW7OzB37+J4nLUrSasjMVU6zt2MEcDnwm6Ub/8bi8GKHAr9a0cWZ6SOT0aNHlx5DVR5+Fn4WfhZ9PC68kNxhB3L+/KYb55YuAkfEMOBoYGZEPESxZ/qrwD9HxFCKraFPAMe1Mg5J6mpTpsBpp8HkybDhhk1f1updQPcBg/v4lnv+JWkgzJ0Lhx8Ol18O2/ev7tBK4A7R09NTdgiV4WexhJ/FErX8LF57rWj8R46EAw/s9+UtXwR+KyIiqxyfJJVq1CiYMwduugkGLenPRwTZxCKwp4FKUie68kqYNAmmTVum8e8PRwCS1GkefBA+9Sm45x7YYYc3fbvZEYBrAJLUSZ5+Gg47DC68sM/Gvz8cAUhSp3jjDdhvP9hlFzjrrBW+rdkRgAlAkjrFV74CM2fCT34Cg/vaYV9wEViSusn48fDjHxfz/ytp/PvDEYAkVd2MGfCJT8Cdd8JOO63y7S4CS1I3eO45OOQQOP/8phr//nAEIElVtXAhHHBAsdvnO82fmu8IQJI63de/DgsWwDe+0ZLf3kVgSaqiG2+Eq68uKn3XaE1T7RSQJFXNI4/AXnvBrbfCRz7S78udApKkTvTCC3DwwXDOOavV+PeHIwBJqopFi4odP1tuCRdcsNq/jYVgktRpzjwTnnkGrr++LT/OBCBJVXDrrXDRRcWi71prteVHmgAkqWyPPQbHHlvc2OUd72jbj3URWJLK9NJLxbz/f/837L57W3+0i8CSVJZM+OxnYcMN4dJLIVa5btsUF4Elqeq++U144gm4994Ba/z7wwQgSWW44w4491x44AFYZ51SQjABSFK7Pf44HHMMXHstDBlSWhguAktSO73yChx6KJxyCvT0lBqKi8CS1C6ZMGJEUfF79dUtm/d3EViSquZ73yvu6Xv//aUs+i7PEYAktcM998ARR8DUqfDud7f0R3kaqCRVxR//CEcdBVdd1fLGvz9MAJLUSgsWwGGHwfHHw777lh3NMpwCkqRWyYSRI4sz/q+7rm3z/i4CS1LZLr4Ypkwp5v0rsOi7PEcAktQKU6bA8OEweTJsv31bf7SLwJJUlrlz4fDD4fLL297494cJQJIG0muvFY3/yJFw4IFlR7NSTgFJ0kAaNQrmzClu7jKonD52JaaAImKriLgrIn4dETMj4vjG65tExKSI+G1E3B4RG7cyDklqi7FjYdKkYr9/SY1/f7R0BBARWwBbZObDEbEBMB0YDhwLPJuZ34iIk4FNMvOUPq53BCCpM0yfDvvvX1T87rBDqaFUYgSQmU9l5sON5y8BjwBbUSSBsY23jQUObmUcktRSTz9dnPB54YWlN/790bY1gIh4F9ALfBD4Q2ZustT3nsvMTfu4xhGApGp74w3Ybz/YZRc466yyowEqVgjWmP65ATghM1+KiOVb9RW28mPGjPnb856eHnpKPj9bkpZxyimwxhpwxhmlhdDb20tvb2+/r2v5CCAi1gBuAW7LzPMbrz0C9GTmvMY6wd2Z+YE+rnUEIKm6xo+HU0+FBx+ETd80iVGaSqwBNFwO/GZx49/wv8DnG88/B0xsQxySNHCmTi0OeLvxxko1/v3R6l1Aw4B7gZkU0zwJfBV4ALgOGALMBo7IzOf7uN4RgKTqmTWruJ3jZZfBAQeUHc2bNDsCsBBMkvrjT3+CYcNg9Gj4/OfLjqZPVZoCkqTu8PzzxV7/L36xso1/fzgCkKRmvPpq0fjvuCOcf34lj3dezCkgSRooCxfCkUcWjf748TB4cNkRrVSl6gAkqWNlwgknwDPPwG23Vb7x7w8TgCStzFlnwc9+BvfeC+usU3Y0A8oEIEkrcsUVcMklcN99sHH3HVrsGoAk9eXWW+ELXyhO93zf+8qOpl9cA5Ck1TV1arHN85ZbOq7x7w/rACRpabNmwcEHw5VXwq67lh1NS5kAJGmxP/0JPvUpOPvsSh7xMNBMAJIEXVfl2wwXgSWpg6p8m2ElsCQ1o8OqfJvhLiBJWpUurvJthglAUn11cZVvM0wAkuqpy6t8m+EagKT66eAq32a4BiBJfalJlW8zrAOQVB81qvJthglAUj3UrMq3GSYASd2vhlW+zXARWFJ367Iq32ZYCSxJXVjl2wx3AUmqt5pX+TbDBCCpO519dq2rfJthApDUfa64Ai6+uNZVvs1wDUBSd+nyKt9muAYgqX6s8u0X6wAkdQerfPvNBCCp81nlu1pMAJI62wsvFI2/Vb795iKwpM5VwyrfZlgJLKm71bTKtxnuApLUvazyHRAmAEmdxyrfAdHSReCIuCwi5kXEjKVeGx0Rf4yIXzQe+7cyBkldZnGV7223WeX7FrV0DSAi9gBeAsZl5o6N10YDL2bmd5q43jUASUtY5duUZtcAWjoCyMzJwF/6+JZL9ZL6Z3GV78SJNv4DpKw6gFER8XBEXBoRjuEkrdzMmVb5tkAZCeACYNvMHAo8BaxyKkhSjU2fDvvsU+zzt8p3QLV9F1BmPr3Ul5cAN6/s/WPGjPnb856eHnp6eloSl6QKuv/+oud/ySUwfHjZ0VRWb28vvb29/b6u5YVgEfEu4ObM/IfG11tk5lON5ycCH8nMf17BtS4CS3XV2wtHHAHjxhXVvmpaJQrBIuIaoAd4W0TMAUYDH4+IocAi4AnguFbGIKkD3X47HHMMTJgAH/942dF0LY+CkFQtEyfCyJFw002w++5lR9ORKrENVJL65brr4LjjiiIvG/+WMwFIqoZx4+A//gMmTYKddy47mlrwLCBJ5bvoIjjjDLjrLnj/+8uOpjZMAJLKdd55xaO3F97znrKjqRUTgKTynHUWXH55carn1luXHU3tmAAktV8mfP3r8KMfFQe7vfOdZUdUSyYASe2VCSedBHfeWUz7bLZZ2RHVlglAUvssWgRf/jJMm1Ys+G66adkR1ZoJQFJ7LFwIX/wiPPpo0fvfaKOyI6o9E4Ck1nv9dfjc52DePPjpT2H99cuOSJgAJLXaa6/BkUfCq6/CLbfAuuuWHZEarASW1Dp//Sscckjx/MYbbfwrxgQgqTVefhkOPLC4cfuECbD22mVHpOWYACQNvPnzYb/9YJtt4KqrYM01y45IfTABSBpYzz0Hn/wk7LQTXHopDB5cdkRaAROApIHz9NOw997
"text/plain": [
"<matplotlib.figure.Figure at 0x6fa20b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"figure()\n",
"plot(x, y, 'r')\n",
"xlabel('x')\n",
"ylabel('y')\n",
"title('title')\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Most of the plotting related functions in MATLAB are covered by the `pylab` module. For example, subplot and color/symbol selection:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7001780>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"subplot(1,2,1)\n",
"plot(x, y, 'r--')\n",
"subplot(1,2,2)\n",
"plot(y, x, 'g*-');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The good thing about the pylab MATLAB-style API is that it is easy to get started with if you are familiar with MATLAB, and it has a minimum of coding overhead for simple plots. \n",
"\n",
"However, I'd encourage not using the MATLAB compatible API for anything but the simplest figures.\n",
"\n",
"Instead, I recommend learning and using matplotlib's object-oriented plotting API. It is remarkably powerful. For advanced figures with subplots, insets and other components it is very nice to work with. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The matplotlib object-oriented API"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The main idea with object-oriented programming is to have objects that one can apply functions and actions on, and no object or program states should be global (such as the MATLAB-like API). The real advantage of this approach becomes apparent when more than one figure is created, or when a figure contains more than one subplot. \n",
"\n",
"To use the object-oriented API we start out very much like in the previous example, but instead of creating a new global figure instance we store a reference to the newly created figure instance in the `fig` variable, and from it we create a new axis instance `axes` using the `add_axes` method in the `Figure` class instance `fig`:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x7f9b320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"\n",
"axes = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # left, bottom, width, height (range 0 to 1)\n",
"\n",
"axes.plot(x, y, 'r')\n",
"\n",
"axes.set_xlabel('x')\n",
"axes.set_ylabel('y')\n",
"axes.set_title('title');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Although a little bit more code is involved, the advantage is that we now have full control of where the plot axes are placed, and we can easily add more than one axis to the figure:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEgCAYAAACq+TSYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VFX+x/H3CU2KILgx9CaiIIHQRIGVKFWkiKIURQQWK2LZdXGxgLoq6GJ3UVE04FJWUBGkCoSSH71KWxQlEjABDL0ISc7vjxsiJWVIZuZO+byeZx7CzJ25Hy4z8805555zjbUWERGRnES4HUBERAKbCoWIiORKhUJERHKlQiEiIrlSoRARkVypUIiISK5UKEQugjGmijHmsDHG5LJNhjGmpj9zifiSCoVIHowxPxtjbgaw1u6y1pa2mROQjDELjTH9z3uKJidJSFGhEPG+HFsbIsFIhUIkF8aYcUBVYEZml9NTmV1LEcaYfwJ/Bt7LfOydbJ5f1BjzL2NMojHmV2PMv40xxfz97xApCBUKkVxYa+8FfgFutdaWBv5LZteStfZZYAkwKLM7anA2LzESqAXUz/yzEvC8P7KLeIsKhYhn8tudNBB4wlp7yFp7DBgB9PJeLBHfK+x2AJFQZYyJBEoAa846SSoCjWFIkFGhEMlbbmcx5fbYfuA4cK219lfvRhLxH3U9ieQtGTgzL8Jwbosg5azHzpF5Cu0Y4K3M1gXGmErGmHY+zCridSoUInkbATxnjEkF7uDcVsTbwJ3GmN+MMW9l3nf240OAH4HlxpiDwFygth8yi3iN8eWFi4wxlYFxQBSQAXxkrX3XGDMMZ5Bvb+amQ621s30WRERE8s3XhaI8UN5au94YUwpYA3QFegBHrLVv+GznIiLiFT4dzLbWJuP072KtPWqM2YpzHjnozA8RkaDgtzEKY0x1IAZYkXnXIGPMemPMx8aYMv7KISIiF8enXU9ZO3G6neKBl6y10zLPANlvrbWZyyBUsNYOyOZ5WlxNRMTHrLW59vD4vEVhjCkMTAHGW2unZYbaZ/+oUGOApjk931qr21m3YcOGuZ4h0G46JjomOiYXeUtJwVatip061aPvcX90PY0Ftlhr3z5zR+Yg9xm3A5v8kENERNLSoEcPuOceuP12j57i08FsY0wL4G7ge2PMOpzzy4cCvY0xMTinzO4EHvBlDhERyTRkCBQrBi++6PFTfH3WUwJQKJuHNGcin2JjY92OEHB0TC6kY3IhHRNgwgT4+mtYtQoKZffVnD2/DGbnlzHGBnI+EZGgsWEDtGkD8+dD/fpZdxtjsG4PZouIiMtSU53xiHffPadIeEotChGRUJaeDh07Qr16MGrUBQ+rRSEiEu6ee84502nkyHy/hK5HISISqr780hnAXrUKCuf/615dTyIioWjLFmjVCmbPhsaNc9xMXU8iIuHo0CHo1g1efz3XIuEptShEREJJRgbcdhtUrQrvvZfn5p60KDRGISISSv75T+d02ClTvPaSKhQiIqFixgz46CNYvRqKFvXay2qMQjxWr149Fi9e7HYMj3Ts2JHx48fn+Hi/fv14/vnn/ZhIxMd++AH694cvvoDy5fPe/iKoUIjHNm3axI033ujXfSYmJhIREUFGRkaO27zwwgvce++959w3c+ZM+vTpA0BcXBx//vOffZpTxFVHjzrjEi+9BDfc4PWXV6GQgJWeno619sxgW75f58xriIQka6FfP6dA3H+/T3ahQiEeq1GjBgsWLACc3+J79OhB3759KV26NNHR0axduzZr25EjR1K5cmVKly5NnTp1WLhwIeB8aY8YMYJatWoRGRlJz549OXjwIPBH62Hs2LFUq1aN1q1b06pVK6y1XHbZZZQuXZoVK1ack2nOnDm88sorTJ48mUsvvZSGDRsCcNNNNzF27Fi2bdvGQw89xLJly7j00kspV65ctv+2GTNm0LBhQ8qWLUvLli35/vvvvX78RHzitdfgl1+cM5x89AuRCoXk2/Tp0+nduzeHDh2ic+fOPPLIIwBs376d999/nzVr1nD48GHmzJlD9erVAXjnnXf45ptvWLJkCXv27KFs2bI8/PDD57zu4sWL2bZtG3PmzGHx4sUYYzh8+DCHDx+mWbNm52zbvn17hg4dSo8ePThy5Ajr1q075/FrrrmGDz74gBtuuIEjR46Qmpp6wb9j3bp1DBgwgDFjxpCamsoDDzxAly5dOH36tBePlogPzJsHb78NU6fCJZf4bDcqFJJvLVu2pH379hhj6NOnDxs3bgSgUKFCnDp1ik2bNpGWlkbVqlWpUaMGAB9++CEvv/wyFSpUoEiRIjz//PNMmTIlawzCGMMLL7xA8eLFKVasWNa+fDmfZsyYMTz44IM0adIk699SrFgxli9f7rN9ihTYzz9Dnz4wcSJUruzTXalQSL6VP+vMihIlSnDy5EkyMjK48soreeuttxg+fDhRUVH07t2b5ORkwOle6tatG+XKlaNcuXLUrVuXIkWKkJKSkvValX38pj9fYmIio0aNyspUtmxZkpKS2LNnj19ziHjs+HFn5vXQoc4yHT6mQiE+0bNnT5YsWUJiYiIAQ4YMAaBq1arMmjWL1NRUUlNTOXDgAMeOHaNChQpZzz174NmTQei8tsnr8SpVqvDMM8+ck+no0aP06NEjz32L+J21zqB1dDQ8+qhfdqlCIV5zpnto+/btLFy4kFOnTlG0aFGKFy9ORITzVnvggQcYOnQov/zyCwD79u3jm2++ueA1zoiMjCQiIoIdO3bkuN+oqCh27tyZY/dUVFQUSUlJOY45DBw4kA8++ICVK1cCcOzYMWbOnMmxY8c8/JeL+NE778DmzfDhhz4bvD6fCoV4zNPf3H///XeefvppIiMjqVixIvv27ePVV18F4LHHHqNr1660a9eOMmXK0Lx586wv6Oz2Ubx4cZ555hlatGhBuXLlztn2jDvvvBNrLZdffjlNmjS54HVuvvlmrr32WsqXL88VV1xxwfMbN27MmDFjGDRoEOXKlaN27drExcV5eFRE/GjRInj1VfjqKyhRwm+71aKAHqpevTplypQhIiKCIkWKZPuFJSLiM7t2QbNmEBcHbdt67WW1KKAXRUREEB8fT9myZd2OIiLh5uRJuOMOePxxrxYJT6nryUPW2lyXkRAR8Qlr4ZFHoHp1eOopVyKoUHjIGEPbtm1p2rQpY8aMcTuOiISLDz+EFStg7Fi/DV6fT11PHkpISKBChQrs27ePtm3bUqdOHVq2bJn1uNYSkmAUKGOAkoNly2DYMEhIgFKlXIuhFoWHzpznHxkZSbdu3bIdzLbWBsRt2LBhrmcIpByBlMVfOZKPJDNh4wT6f92fqm9WpeKoitz71b2MWz+O3Yd3Y60KRMD79Ve4806nJVGrlqtR1KLwwPHjx8nIyKBUqVIcO3aMuXPnMmzYMLdjiWQ5euooixMX891P3zH/5/n8cugXWlVrRZuabXiqxVNcffnVavUGk1OnnCLxwANw661up1Gh8ERKSgrdunXDGENaWhp333037dq1czuWhLHT6adZuXtlVmFY++tamlZqSpsabfio00c0rtiYwhH6eAetJ56Ayy+HZ55xOwmgQuGRGjVqsH79erdjeCw2NtbtCEDg5IDAyZLfHNZaNu/bnFUYFicu5sqyV9KmZhuevfFZWlZtSYki/puAJT702Wcwf74zgB0RGKMDmnDnJQW9uI7I+XYd2sX8n+dnFYcSRUrQpkYb2tRsw001buJPJf5UoNfXezYArV4NHTs6M7Dr1PHLLj2ZcKdC4SX60ElBHThxgPid8Xz303d89/N3pJ5IpXWN1rSp2YbWNVpTo2wNr+5P79kAs3cvNG0Kb74Jt9/ut92qUPiRPnRysU6mneT/dv2fUxh++o5t+7fRomqLrOJQP6o+EcZ3XQ96zwaQtDRnxnXz5vDyy37dtQqFH+lDJ3lJz0hnffL6rBbD8qTlRF8RnVUYrq98PcUKF8v7hbxE79kA8te/OivCfvstFCrk112rUPiRPnSSnX3H9jHrx1nM2D6D+T/PJ6pkFG1qOuMMraq1oswlZVzLpvdsgJg4EZ59Flatghyu6e5LKhR+pA+dgHN20pZ9W5i+fTrTt09n095NtKnZhk5XdaJ9rfZ
"text/plain": [
"<matplotlib.figure.Figure at 0x72d0470>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"\n",
"axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes\n",
"axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3]) # inset axes\n",
"\n",
"# main figure\n",
"axes1.plot(x, y, 'r')\n",
"axes1.set_xlabel('x')\n",
"axes1.set_ylabel('y')\n",
"axes1.set_title('title')\n",
"\n",
"# insert\n",
"axes2.plot(y, x, 'g')\n",
"axes2.set_xlabel('y')\n",
"axes2.set_ylabel('x')\n",
"axes2.set_title('insert title');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we don't care about being explicit about where our plot axes are placed in the figure canvas, then we can use one of the many axis layout managers in matplotlib. My favorite is `subplots`, which can be used like this:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x8065710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots()\n",
"\n",
"axes.plot(x, y, 'r')\n",
"axes.set_xlabel('x')\n",
"axes.set_ylabel('y')\n",
"axes.set_title('title');"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x8498390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(nrows=1, ncols=2)\n",
"\n",
"for ax in axes:\n",
" ax.plot(x, y, 'r')\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" ax.set_title('title')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That was easy, but it isn't so pretty with overlapping figure axes and labels, right?\n",
"\n",
"We can deal with that by using the `fig.tight_layout` method, which automatically adjusts the positions of the axes on the figure canvas so that there is no overlapping content:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x892eb70>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(nrows=1, ncols=2)\n",
"\n",
"for ax in axes:\n",
" ax.plot(x, y, 'r')\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" ax.set_title('title')\n",
" \n",
"fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Figure size, aspect ratio and DPI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib allows the aspect ratio, DPI and figure size to be specified when the `Figure` object is created, using the `figsize` and `dpi` keyword arguments. `figsize` is a tuple of the width and height of the figure in inches, and `dpi` is the dots-per-inch (pixel per inch). To create an 800x400 pixel, 100 dots-per-inch figure, we can do: "
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x8065320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(8,4), dpi=100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The same arguments can also be passed to layout managers, such as the `subplots` function:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x807b278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(figsize=(12,3))\n",
"\n",
"axes.plot(x, y, 'r')\n",
"axes.set_xlabel('x')\n",
"axes.set_ylabel('y')\n",
"axes.set_title('title');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Saving figures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To save a figure to a file we can use the `savefig` method in the `Figure` class:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"fig.savefig(\"filename.png\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we can also optionally specify the DPI and choose between different output formats:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"fig.savefig(\"filename.png\", dpi=200)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### What formats are available and which ones should be used for best quality?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib can generate high-quality output in a number formats, including PNG, JPG, EPS, SVG, PGF and PDF. For scientific papers, I recommend using PDF whenever possible. (LaTeX documents compiled with `pdflatex` can include PDFs using the `includegraphics` command). In some cases, PGF can also be good alternative."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Legends, labels and titles"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now that we have covered the basics of how to create a figure canvas and add axes instances to the canvas, let's look at how decorate a figure with titles, axis labels, and legends."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Figure titles**\n",
"\n",
"A title can be added to each axis instance in a figure. To set the title, use the `set_title` method in the axes instance:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ax.set_title(\"title\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Axis labels**\n",
"\n",
"Similarly, with the methods `set_xlabel` and `set_ylabel`, we can set the labels of the X and Y axes:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ax.set_xlabel(\"x\")\n",
"ax.set_ylabel(\"y\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Legends**\n",
"\n",
"Legends for curves in a figure can be added in two ways. One method is to use the `legend` method of the axis object and pass a list/tuple of legend texts for the previously defined curves:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ax.legend([\"curve1\", \"curve2\", \"curve3\"]);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The method described above follows the MATLAB API. It is somewhat prone to errors and unflexible if curves are added to or removed from the figure (resulting in a wrongly labelled curve).\n",
"\n",
"A better method is to use the `label=\"label text\"` keyword argument when plots or other objects are added to the figure, and then using the `legend` method without arguments to add the legend to the figure: "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ax.plot(x, x**2, label=\"curve1\")\n",
"ax.plot(x, x**3, label=\"curve2\")\n",
"ax.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The advantage with this method is that if curves are added or removed from the figure, the legend is automatically updated accordingly.\n",
"\n",
"The `legend` function takes an optional keyword argument `loc` that can be used to specify where in the figure the legend is to be drawn. The allowed values of `loc` are numerical codes for the various places the legend can be drawn. See http://matplotlib.org/users/legend_guide.html#legend-location for details. Some of the most common `loc` values are:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x3dfc1d0>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ax.legend(loc=0) # let matplotlib decide the optimal location\n",
"ax.legend(loc=1) # upper right corner\n",
"ax.legend(loc=2) # upper left corner\n",
"ax.legend(loc=3) # lower left corner\n",
"ax.legend(loc=4) # lower right corner\n",
"# .. many more options are available"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following figure shows how to use the figure title, axis labels and legends described above:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x6feab00>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(x, x**2, label=\"y = x**2\")\n",
"ax.plot(x, x**3, label=\"y = x**3\")\n",
"ax.legend(loc=2); # upper left corner\n",
"ax.set_xlabel('x')\n",
"ax.set_ylabel('y')\n",
"ax.set_title('title');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Formatting text: LaTeX, fontsize, font family"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The figure above is functional, but it does not (yet) satisfy the criteria for a figure used in a publication. First and foremost, we need to have LaTeX formatted text, and second, we need to be able to adjust the font size to appear right in a publication.\n",
"\n",
"Matplotlib has great support for LaTeX. All we need to do is to use dollar signs encapsulate LaTeX in any text (legend, title, label, etc.). For example, `\"$y=x^3$\"`.\n",
"\n",
"But here we can run into a slightly subtle problem with LaTeX code and Python text strings. In LaTeX, we frequently use the backslash in commands, for example `\\alpha` to produce the symbol $\\alpha$. But the backslash already has a meaning in Python strings (the escape code character). To avoid Python messing up our latex code, we need to use \"raw\" text strings. Raw text strings are prepended with an '`r`', like `r\"\\alpha\"` or `r'\\alpha'` instead of `\"\\alpha\"` or `'\\alpha'`:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x706e128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(x, x**2, label=r\"$y = \\alpha^2$\")\n",
"ax.plot(x, x**3, label=r\"$y = \\alpha^3$\")\n",
"ax.legend(loc=2) # upper left corner\n",
"ax.set_xlabel(r'$\\alpha$', fontsize=18)\n",
"ax.set_ylabel(r'$y$', fontsize=18)\n",
"ax.set_title('title');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also change the global font size and font family, which applies to all text elements in a figure (tick labels, axis labels and titles, legends, etc.):"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Update the matplotlib configuration parameters:\n",
"matplotlib.rcParams.update({'font.size': 18, 'font.family': 'serif'})"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x702a2b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(x, x**2, label=r\"$y = \\alpha^2$\")\n",
"ax.plot(x, x**3, label=r\"$y = \\alpha^3$\")\n",
"ax.legend(loc=2) # upper left corner\n",
"ax.set_xlabel(r'$\\alpha$')\n",
"ax.set_ylabel(r'$y$')\n",
"ax.set_title('title');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A good choice of global fonts are the STIX fonts: "
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Update the matplotlib configuration parameters:\n",
"matplotlib.rcParams.update({'font.size': 18, 'font.family': 'STIXGeneral', 'mathtext.fontset': 'stix'})"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x8c84908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(x, x**2, label=r\"$y = \\alpha^2$\")\n",
"ax.plot(x, x**3, label=r\"$y = \\alpha^3$\")\n",
"ax.legend(loc=2) # upper left corner\n",
"ax.set_xlabel(r'$\\alpha$')\n",
"ax.set_ylabel(r'$y$')\n",
"ax.set_title('title');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Or, alternatively, we can request that matplotlib uses LaTeX to render the text elements in the figure:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"matplotlib.rcParams.update({'font.size': 18, 'text.usetex': True})"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x96ba940>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(x, x**2, label=r\"$y = \\alpha^2$\")\n",
"ax.plot(x, x**3, label=r\"$y = \\alpha^3$\")\n",
"ax.legend(loc=2) # upper left corner\n",
"ax.set_xlabel(r'$\\alpha$')\n",
"ax.set_ylabel(r'$y$')\n",
"ax.set_title('title');"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# restore\n",
"matplotlib.rcParams.update({'font.size': 12, 'font.family': 'sans', 'text.usetex': False})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Setting colors, linewidths, linetypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Colors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With matplotlib, we can define the colors of lines and other graphical elements in a number of ways. First of all, we can use the MATLAB-like syntax where `'b'` means blue, `'g'` means green, etc. The MATLAB API for selecting line styles are also supported: where, for example, 'b.-' means a blue line with dots:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x96df0b8>]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# MATLAB style line color and style \n",
"ax.plot(x, x**2, 'b.-') # blue line with dots\n",
"ax.plot(x, x**3, 'g--') # green dashed line"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also define colors by their names or RGB hex codes and optionally provide an alpha value using the `color` and `alpha` keyword arguments:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x6fbc048>]"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAAEFCAYAAADHZN0rAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAHLhJREFUeJzt3Xt0VfWd9/H3l4vcSaJcAhYdpVpBp2K1y2KlPTq04o2LHR21Wm31GWHkUnWezpoZO6WX1T4zz5oqoNVKa1t1dVpbB1BA6LQaFQpIH22rg+AoKspVgZAAhgTyff7YCWdzCHBOsnfO2Wd/Xmu5CmHn5Ley6tfN7+x3fubuiIhI6etS7AWIiEh+NLBFRBJCA1tEJCE0sEVEEkIDW0QkITSwRUQSQgNbRCQh8hrYZnaymS0ysx1mtsnM5piZhr2ISCfKd+j+ANgGDAZGAZ8F/i6uRYmIyOHyHdh/AfzS3ZvcfRuwBDgztlWJiMhh8h3Y9wLXmlkvMzsRuBR4Or5liYhIrnwH9gvAWUAdsAFY7e5PxrYqERE5zDEHtpkZwRbIr4HewADgeDP715jXJiIiIXasn9ZnZicQvOFY6e71LR+bAHzb3T+ec61+9J+ISDu4ux3rmmPeYbv7duAtYLKZdTWzSuAm4E9HuF7/uPONb3yj6GsolX/0vdD3Qt8L5/3GXXz3vf/gYy9/hcnrZ7Fm7zsH/yxf3fK87ipgFvCPwH7gGeDOvL+KiEhKbWz8gAe2LuTx7c8xvmo0S0Z8l7/oMbhdr5XXwHb3PwMXtesriIik0JsNm5izZQGLa1/k+gEX8/zIf6f6uOM79Jr53mFLgTKZTLGXUDL0vcjS9yKrXL8Xr+x9m9lb5rGs/lW+MnAcK8+azfHd+kXy2sd807GgFzPzKF9PRCQpVu1ey6zN83jlw7eZMvgKvjRgLH279srrc80Mz+NNRw1sEZF2cneerfsTs7bMY2PjdqZVT+BvTvgsPbscV9Dr5DuwtSUiIlKgZm9mUe2LzNoyj8bm/UyvnsjE4y+gm3WN9etqYIuI5KnJ9/PE9mXM3jKf/l17c9eQv+aSinPp0kk/vFRbIiIix/BhcyM//+AZ7t/6JKf0GMJXqydxYb8zCULwjtMetohIB9Ud2MtP3/8NP9y6iHP7nMaMIZM4t89pkX8dDWwRkXb6oKmOudsW87P3/4uLKs5mevVERvQ6Kbavp4EtIlKg3CpxavWEdleJhdDAFhHJ0/qGzczZsoBFtau4fsDFTB50eYerxEJoYIuIHENulXjLoHGRVYmF0MAWETmCjlSJcdDAFhEJiapKjINKRxERilclxkEDW0TKUpPv54kdy5izZQH9uvTq9CoxDtoSEZGyEneVGAftYYtIqnRWlRgHDWwRSYXOrhLjoIEtImWtWFViHDSwRaQstVaJi2tf5LoBF3V6lRgHDWwRKSulUiXGQQNbRMpCqVWJcYhsYJtZPdB6kQG9gPvdfUYb12pgi0iHlXKVGIfISkd3P/h3DjPrA2wGHu/Y8kREDldOVWIcCi0d/xrY5u7L41iMiKRTOVaJcSh0YH8JeCSOhYhI+uRWif9n2C0lXyUWU95vOprZycAbwEfd/Z0jXKM9bBE5ptYq8aGti/lEn48mqkqM2p6GZvr26hr5T+u7EVh2pGHdaubMmQd/nclkyGQyBXwJESlnuVXir06/O3FVYhRqampYuOQZ/vB6A39+qzHvzyvkDnsd8F13/9lRrtEdtogcJrdKvL16PKf0qC72sopiw7Ym5jy5iyeW7+aaMX2ZOr6SYQO7R/cctpldACwFqt19z1Gu08AWkYPKsUpsr3XvNTJrfi1LX9rLzWP7M/nyCgZWBE+/RBrOmNmDQE93v/kY12lgiwiv7n2b2Vvm80L9K2VXJRbq5Tf3cc+8naxat4/bLu3PLZf0p6LPoY8pqnQUkU63avdaZm+Zzyt73+K2QZdz08DPlV2VmA935/evNfD9ebWse6+RaVdWcuNf9aN3j7YfU9TAFpFOkbYq8Wjcnd+8tJfvz6tlZ30z0ydUcM1n+nFct6PPYp3pKCKxUpWYdaDZmb9iD/fOr6WLwR2TKrny/D507RLt8+S6wxaRguRWiTOGTEptlbivyfnl8/XMXlDLwIqu3HlVFWNH9So4/NGWiIhEKolnJcZlT0Mzj/yunvueqmXkScdx56RKRo9o/169BraIREJVYlbt7gP8aGkdc5fUMXpET+6YWMnZp/bo8OtqYItIh5TDWYlR2Vq7nwcW7uLRZ+oZd15vZkyo5PQTo3tTVQNbRNqlnM5K7KhwlXj1mL5MvbKCYQO7R/51NLBFpCCqErNyq8TbLuvPoMr4HqrTwBaRvJTzWYmFyqdKjIMGtogcVRrOSsxHoVViHDSwReQwqhKzwlXijvpmZuRZJcZBpaOIHKQqMStcJRpBlTj+U9FXiXHQHbZIGVOVmHVYlTipirHnFF4lxkFbIiIppioxK1wlnjHsOO6aVMkFI0trr14DWySFWqvEH25dxLl9TlOVuLSOh57exQUje/HViZWMiqBKjIMGtkiKqErMirtKjIMGtkgKqErM6qwqMQ4a2CJlrLVKXFS7iusGXMSUQVeoSnxpLzeN7c/kmKvEOOixPpEylFslrjxrtqrEdfv420v789KXh3VKlVhMusMWSQBViQF3Z/maoEp8fWNQJd5wcT/69Ez2Y4raEhFJOFWJWaVUJcZBWyIiCaUqMSvJVWIc8r7DNrNrgX8BTgI2Aze7+/Kca3SHLdJOTb6fJ7YvY/aW+fTv2jv1VeIvnqtnzpOlVyXGIdItETP7HPAQcI27rzazIQDuvjnnOg1skQKpSsza09DMz35bx/0LdzFi2HHcdVXHzkpMiqgH9nLgR+7+k2Ncp4EtkidViVm1uw8wd0kdc5eUfpUYh8j2sM2sC3Ae8KSZ/Q/QA1gA/L277+vwSkVSJrdK/PXpX1eV2FIlLvzm0JKvEovpmHfYLdsfG4E/AFcA+4EngWfd/es51+oOW+QINjZ+wA+2PsWvtj+f+irxnZYq8T8TWCVGbtcurLIysqdEPmz539nuvg3AzL4P/DPw9dyLZ86cefDXmUyGTCaTx5cQKV9vNmw6eFbi9QMu5vmR/57aKnFtS5X4m5YqceU9H0lclRiFmpoaahYuhA0bYOfOvD8v3z3sDcA/uftjLb+fBNzt7ufmXKc7bJEWOisx66U3Grh3fu3BKvHWTjorsSS9+y688AJs2gSjR8N552E9e0b6puM3gXFkt0QWAM+4+8yc6zSwJfVW7l7LbFWJZVsltos7rF8fDOraWvj0p2HUKOgebANF/ZRIN2AWcD3BFskvgX9w98ac6zSwJZVaq8R7t8xjk6rEsq4SC+IOa9cGg7qpCS68EM46C7oe+rcLpekineCAN7O49kXu3TyPJk93lbj/gLNgxR7uXRBUiV+dVMmEtFaJBw7Aq6/CsmXBXfSYMXDGGXCEZ+s1sEVipCoxq7VKnL2glkGV5V8lHlVTE/zxj7B8OVRVBXfUp556xEHdSgNbJAaqErPSWiW2ad8++MMfYMUKOPHEYFAPG5b3p2tgi0RIVWJW2qvEQ+zdC6tWwerVMHx4MKgHF/5svQa2SATeb9p1sEq8uGKUzkpM2FmJsamrC+6m//hHGDkyeOrj+PY/W6+BLdIBrVXi49ufZ0LVaG6vHs8pPaqLvayiUJUYsmNHsD+9Zk3wWN7o0dC/f4dfVgNbpB1yq8TJgy5XlfjSXm4e25/bEnhWYmS2bg0ezVu/Hj75STj/fOjdO7KX18AWKYCqxKxwlXjbpf25RVXiIVUiPaLfr9fAFsmDqsRAW1XijX/Vj9490veY4rGqxDhoYIscgarELHdn6f8LqsTa3c1MV5V4zCoxDjrTUSRHbpU4Y8gkJlSNTnWVeM/8Wrp2Cc5KvPJ8VYn5VInFpDtsKXu5VeJXh1zF5ys+oSqxsit3XlXF2FGqEqmsDAZ1HlViHLQlIqmnKjErXCWOPOk47pykKpEVK2Do0GBQF1AlxkEDW1Kr7sBefrJtKQ9tW6wqMVQlfrqlSjxbVWJwJ33hhVBdGs/Wa2BL6nzQVMdD2xapSgS27NzPA4t28dgz9Vx6Xm9mTKzktKHpe1MVOLRKHDEieOrjhBOKvap
"text/plain": [
"<matplotlib.figure.Figure at 0x984b550>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(x, x+1, color=\"red\", alpha=0.5) # half-transparent red\n",
"ax.plot(x, x+2, color=\"#1155dd\") # RGB hex code for a bluish color\n",
"ax.plot(x, x+3, color=\"#15cc55\") # RGB hex code for a greenish color"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Line and marker styles"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To change the line width, we can use the `linewidth` or `lw` keyword argument. The line style can be selected using the `linestyle` or `ls` keyword arguments:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x891f0f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(12,6))\n",
"\n",
"ax.plot(x, x+1, color=\"blue\", linewidth=0.25)\n",
"ax.plot(x, x+2, color=\"blue\", linewidth=0.50)\n",
"ax.plot(x, x+3, color=\"blue\", linewidth=1.00)\n",
"ax.plot(x, x+4, color=\"blue\", linewidth=2.00)\n",
"\n",
"# possible linestype options -, --, -., :, steps\n",
"ax.plot(x, x+5, color=\"red\", lw=2, linestyle='-')\n",
"ax.plot(x, x+6, color=\"red\", lw=2, ls='-.')\n",
"ax.plot(x, x+7, color=\"red\", lw=2, ls=':')\n",
"\n",
"# custom dash\n",
"line, = ax.plot(x, x+8, color=\"black\", lw=1.50)\n",
"line.set_dashes([5, 10, 15, 10]) # format: line length, space length, ...\n",
"\n",
"# possible marker symbols: marker = '+', 'o', '*', 's', ',', '.', '1', '2', '3', '4', ...\n",
"ax.plot(x, x+ 9, color=\"green\", lw=2, ls='--', marker='+')\n",
"ax.plot(x, x+10, color=\"green\", lw=2, ls='--', marker='o')\n",
"ax.plot(x, x+11, color=\"green\", lw=2, ls='--', marker='s')\n",
"ax.plot(x, x+12, color=\"green\", lw=2, ls='--', marker='1')\n",
"\n",
"# marker size and color\n",
"ax.plot(x, x+13, color=\"purple\", lw=1, ls='-', marker='o', markersize=2)\n",
"ax.plot(x, x+14, color=\"purple\", lw=1, ls='-', marker='o', markersize=4)\n",
"ax.plot(x, x+15, color=\"purple\", lw=1, ls='-', marker='o', markersize=8, markerfacecolor=\"red\")\n",
"ax.plot(x, x+16, color=\"purple\", lw=1, ls='-', marker='s', markersize=8, \n",
" markerfacecolor=\"yellow\", markeredgewidth=2, markeredgecolor=\"blue\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Control over axis appearance"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The appearance of the axes is an important aspect of a figure that we often need to modify to make a publication quality graphics. We need to be able to control where the ticks and labels are placed, modify the font size and possibly the labels used on the axes. In this section we will look at controlling those properties in a matplotlib figure."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Plot range"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first thing we might want to configure is the ranges of the axes. We can do this using the `set_ylim` and `set_xlim` methods in the axis object, or `axis('tight')` for automatically getting \"tightly fitted\" axes ranges:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x109cb3750>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 3, figsize=(12, 4))\n",
"\n",
"axes[0].plot(x, x**2, x, x**3)\n",
"axes[0].set_title(\"default axes ranges\")\n",
"\n",
"axes[1].plot(x, x**2, x, x**3)\n",
"axes[1].axis('tight')\n",
"axes[1].set_title(\"tight axes\")\n",
"\n",
"axes[2].plot(x, x**2, x, x**3)\n",
"axes[2].set_ylim([0, 60])\n",
"axes[2].set_xlim([2, 5])\n",
"axes[2].set_title(\"custom axes range\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Logarithmic scale"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is also possible to set a logarithmic scale for one or both axes. This functionality is in fact only one application of a more general transformation system in Matplotlib. Each of the axes' scales are set seperately using `set_xscale` and `set_yscale` methods which accept one parameter (with the value \"log\" in this case):"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x108836e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 2, figsize=(10,4))\n",
" \n",
"axes[0].plot(x, x**2, x, np.exp(x))\n",
"axes[0].set_title(\"Normal scale\")\n",
"\n",
"axes[1].plot(x, x**2, x, np.exp(x))\n",
"axes[1].set_yscale(\"log\")\n",
"axes[1].set_title(\"Logarithmic scale (y)\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Placement of ticks and custom tick labels"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can explicitly determine where we want the axis ticks with `set_xticks` and `set_yticks`, which both take a list of values for where on the axis the ticks are to be placed. We can also use the `set_xticklabels` and `set_yticklabels` methods to provide a list of custom text labels for each tick location:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.text.Text at 0x10a3ae610>,\n",
" <matplotlib.text.Text at 0x10a3aedd0>,\n",
" <matplotlib.text.Text at 0x10a3fe110>,\n",
" <matplotlib.text.Text at 0x10a3fe750>]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10a35d810>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(10, 4))\n",
"\n",
"ax.plot(x, x**2, x, x**3, lw=2)\n",
"\n",
"ax.set_xticks([1, 2, 3, 4, 5])\n",
"ax.set_xticklabels([r'$\\alpha$', r'$\\beta$', r'$\\gamma$', r'$\\delta$', r'$\\epsilon$'], fontsize=18)\n",
"\n",
"yticks = [0, 50, 100, 150]\n",
"ax.set_yticks(yticks)\n",
"ax.set_yticklabels([\"$%.1f$\" % y for y in yticks], fontsize=18); # use LaTeX formatted labels"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are a number of more advanced methods for controlling major and minor tick placement in matplotlib figures, such as automatic placement according to different policies. See http://matplotlib.org/api/ticker_api.html for details."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Scientific notation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With large numbers on axes, it is often better use scientific notation:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x1086350d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1)\n",
" \n",
"ax.plot(x, x**2, x, np.exp(x))\n",
"ax.set_title(\"scientific notation\")\n",
"\n",
"ax.set_yticks([0, 50, 100, 150])\n",
"\n",
"from matplotlib import ticker\n",
"formatter = ticker.ScalarFormatter(useMathText=True)\n",
"formatter.set_scientific(True) \n",
"formatter.set_powerlimits((-1,1)) \n",
"ax.yaxis.set_major_formatter(formatter) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Axis number and axis label spacing"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x108e5aa90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# distance between x and y axis and the numbers on the axes\n",
"matplotlib.rcParams['xtick.major.pad'] = 5\n",
"matplotlib.rcParams['ytick.major.pad'] = 5\n",
"\n",
"fig, ax = plt.subplots(1, 1)\n",
" \n",
"ax.plot(x, x**2, x, np.exp(x))\n",
"ax.set_yticks([0, 50, 100, 150])\n",
"\n",
"ax.set_title(\"label and axis spacing\")\n",
"\n",
"# padding between axis label and axis numbers\n",
"ax.xaxis.labelpad = 5\n",
"ax.yaxis.labelpad = 5\n",
"\n",
"ax.set_xlabel(\"x\")\n",
"ax.set_ylabel(\"y\");"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# restore defaults\n",
"matplotlib.rcParams['xtick.major.pad'] = 3\n",
"matplotlib.rcParams['ytick.major.pad'] = 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Axis position adjustments"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Unfortunately, when saving figures the labels are sometimes clipped, and it can be necessary to adjust the positions of axes a little bit. This can be done using `subplots_adjust`:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x108f68910>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1)\n",
" \n",
"ax.plot(x, x**2, x, np.exp(x))\n",
"ax.set_yticks([0, 50, 100, 150])\n",
"\n",
"ax.set_title(\"title\")\n",
"ax.set_xlabel(\"x\")\n",
"ax.set_ylabel(\"y\")\n",
"\n",
"fig.subplots_adjust(left=0.15, right=.9, bottom=0.1, top=0.9);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Axis grid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the `grid` method in the axis object, we can turn on and off grid lines. We can also customize the appearance of the grid lines using the same keyword arguments as the `plot` function:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x109d8d310>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 2, figsize=(10,3))\n",
"\n",
"# default grid appearance\n",
"axes[0].plot(x, x**2, x, x**3, lw=2)\n",
"axes[0].grid(True)\n",
"\n",
"# custom grid appearance\n",
"axes[1].plot(x, x**2, x, x**3, lw=2)\n",
"axes[1].grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Axis spines"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also change the properties of axis spines:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10a410bd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(6,2))\n",
"\n",
"ax.spines['bottom'].set_color('blue')\n",
"ax.spines['top'].set_color('blue')\n",
"\n",
"ax.spines['left'].set_color('red')\n",
"ax.spines['left'].set_linewidth(2)\n",
"\n",
"# turn off axis spine to the right\n",
"ax.spines['right'].set_color(\"none\")\n",
"ax.yaxis.tick_left() # only ticks on the left side"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Twin axes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sometimes it is useful to have dual x or y axes in a figure; for example, when plotting curves with different units together. Matplotlib supports this with the `twinx` and `twiny` functions:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAboAAAEECAYAAABeN/GAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VGX2wPHvCb0rYm8oigqsoIhdjGLF3jtg7xVX1g7iKrq76rKgrmsBFBEUWRYVBYGowCLyE1BYAUEQEURQlIQQWs7vjzMhQ0hIcmcm987kfJ5nHjL3ztz7TsQ5nLecV1QV55xzLlNlhd0A55xzLpU80DnnnMtoHuicc85lNA90zjnnMpoHOueccxnNA51zzrmM5oHOOedcRotMoBOhtgiviLBIhNUiTBfhtNi55iIUipAb93gw7DY751xGEbkNkWmIFCDyWhmveQSRQkROLHH8KURWxh59qqK5FVUz7AbEqQksBjqqsliEM4BhIrSJe01jVXyFu3POpcaPQG/gVKDeVmdFWgAXAktLHL8ROAc4OHZkLCILUf1nKhtbUZHJ6FTJV6WXKotjz98HFgLt414WmfY651zGUR2B6kjglzJe0Q/oAWwocbwr8FdUl6K6FPgr0C1l7aykyAYOEXYGWgKz4w5/L8IPIrwqwg4hNc055zKdbH1ELgIKUB1dyutbATPjnn8FtE5N0yovkoFOhFrAYGCAKvOAFcBhwF5Yhtcodt4551zybTlEJNII+DNwZxmvbwj8Hvd8dexYJERpjA4AEbKA14EC4DYAVdYAX8Ze8rMItwHLRGgQO+eccy55SmZ0PYHXUV1cxmvygMZxz5vEjkVCpAKdCAK8AuwIdFZlUzlv2ZyRiohPUnHOuQBUtWRgK/l9eiKwByK3xJ7vCAxDpA+qf8GGmNoB02Ln2wKzUtXeyopa1+ULwIHA2aqsKzoowuEiHCBCVmxsri8wQZXc+Derqj9UefTRR0NvQ1Qe/rvw34X/LrZ8rFql7LefAsoVV5SIZyI1EKmLJUE1EKmDSE2gEzbm1hYLaEuBG4D+sXcOAu5BZDdEdgfuAQYkOT4EFplAJ8Le2C+uLfBT3Hq5y4F9gdFYv+/XwFrgstAa65xzaaiwEK64AubPh3bt4KWXtnrJw0A+NrPySuy79gFUf0X159hjObAJWIVqPgC2jGAU9v38FTAK1a2vHpLIdF2q8j3bDrxvVVVbnHMuE/XqBR98AE2bwogRUL9+iReo9sTG47ZNdZ9SjvXAAmTkRCajc8mTnZ0ddhMiw38Xxfx3Uaw6/i5GjoTHHoOsLHjrLWjePOwWVR1RzYw5HCKimfJZnHMumebOhQ4dIDcX+vSBHnF5l4igW09GySge6JxzLoOtXg1HHAFz5sCFF8KwYSBxYa06BDrvunTOuQxVWAjdulmQa90aXnttyyBXXXigc865DNWnj006adLE/mwYmVolVcu7Lp1zLgN9+CF07mw/jxoFZ5xR+uuqQ9dlZJYXOOecS44FC+Cyy0DVlhSUFeSqC8/onHMug6xZA0cdBV9/DWefbV2WWdsYpKoOGZ2P0TnnXIZQheuusyDXsiUMGrTtIFdd+K/AOecyxDPP2GLwhg2LJ6E477p0zrmMMH48nHyyLSkYPhzOP79i7/OuS+ecc5G3eDFccokFufvvr3iQqy48o3POuTS2di0cdxz83//BqafC++9DjRoVf79ndM455yJLFW6+2YLcvvvCm29WLshVFx7onHMuTT3/PAwcCPXqwbvv2vY7bmvedemcc2lo4kQ44QTYuNEyucsCbkXtXZfOOeci58cfbSeCjRvhnnuCB7nqwjM655xLI+vWQXY2TJliGd2YMVAzgWKOntE555yLlDvvtCC3554wdGhiQY67705au6LMMzrnnEsTL78M118PderYGN1hhyVwsf/8B845B4GMz+g80DnnXBr4/HPo2BHWr7cNVLt1S+BiubnQqhUsWVItAp13XTrnXMQtXw4XXGBB7pZbEgxyAI88AkuWQPv2yWhe5Hmgc865CNuwAS66yGZaHnMMPPtsghf8v/+Dvn1tW4OXXtrynMhtiExDpACR1+KOH4nIWER+QeRnRIYhskuJ9z6FyMrYo0+CrUwqD3TOORdh994Ln30Gu+4Kb78NtWsncLGNG+GGG6wo5l13waGHlnzFj0Bv4NUSx7cDXgT2jj1ygfhAeCNwDnBw7HFW7Fgk+Bidc85F1OuvQ5cuUKsWfPKJbaiakOees5mWe+0Fs2dDw4alLy8Q6Q3sgerVpV5H5FAgB9XGseeTgVdRfTn2/GrgBlQTbXFSeEbnnHMR9OWXlnyB9TQmHOQWL4aHHrKf+/e3TevKVt7klI7ArLjnrYCZcc+/AlpXvpGpkcgKDOeccymwcqVttVNQANdeCzcm2gmoCrfdBmvW2KyWM88s9x1lnhE5GHgYODvuaEPg97jnq2PHIsEDnXPORcjGjVbS6/vvoUMH6NcPJNHJ/yNGwKhR0KgROZdeSk7PnuW9o/Q7iuwHfADcgeqkuDN5QOO4501ixyLBx+iccy5CevSAp5+GHXe0CZJ77pngBVevhoMOgqVLLWreeusWpys8RieyN5ADPInqSyVePwl4LW6M7lrgWlSPTrD1SeFjdM45FxHDhlmQq1HDZlgmHOQAHnzQgtwRR8BNN237tSI1EKmL9fbVQKRO7NjuwHig31ZBzgwC7kFkt9hr7wEGJKH1SeEZnXPORcCsWXDkkTaM9txzVtMyYZ9/brNYsrJsdsvBB2/1ki0yOpGewCMlXtILG7PrCayJO66bZ13ae58Cros9+xeqf0rCJ0gKD3TOOReyVatsPG7BArjiCltWkPC43IYNVgzzq6/gvvvgqadKfZnvXuCccy6lCgvhyistyLVrZ8VKEg5yYGnhV19B8+bw6KNJuGD68kDnnHMh6tkTPvgAmjaFd9+F+vWTcNFFi4qD2wsvJOmi6csDnXPOhWTkSOjd24bQ3noL9tknCRdVtcrPa9fCpZfCaacl4aLpLTKBToTaIrwiwiIRVoswXYTT4s53EmGOCGtEGC/CXmG21znnEjFnDlx1lf38xBNw8slJuvDbb8Po0bDddkmoAJ0ZIhPosOmsi4GOqjQGHgKGibCXCM2Ad4EHge2BacDQ0FrqnHMJWL0azjvPtoW78EKbK5IUv/1WPF3zqadgl122/fpqItKzLkWYiU1tbQZ0UeXY2PH6wEqgnSrz7JjPunTORV9hoVXh+ve/oXVrmDKlvLKTlXDzzfDii7afz6efWp9oOXzWZYhE2BloiRUObU1cwVBV8oH5QJtwWuecc8E8+aQFuSZNrDJX0oLc5MkW5GrWhH/+s0JBrrqI5G9ChFrAYGBALGNrgBUJjRepoqHOOVee0aPh4Yft5zfegP33T9KFN2worvx8332WKrrNIlfUWYQs4HWgALgtdrhkwVCwoqG58Qd6xhUqzc7OJjs7O1XNdM65SlmwAC6/3CZF9upVkQ0EKuGvf7XSKi1aFG/F4zaL1BidCILtbLsX0FmVdbHj1wNd48boGgAr8DE651wayMuDo4+Gr7+Gs8+2Lsuk9SwuWABt2tiePmPHwkknVertPkZX9V4ADgTOLgpyMSOANiKcL0Jd4FFgRlGQc865qNqwAS6+2IJcy5YwaFASg5yqTUApKLDyKpUMctVFZDI6EfYGFmJdlpviTt2gyhAROgH9gL2BKUA3VRYXv98zOudctKhCt24W3HbYweaLtGyZxBu8+aYVx2zaFL75BnbaqdKXqA4ZXWQCXaI80Dnnoub++6FPH6vANX687ZSTNL/+CgceCCtWwCuvwDXXBLpMdQh0Ueu6dM65jNC3rwW5GjXgnXeSHOTAZleuWAEdO8LVV5f/+mrMMzrnnEuyoUPhssus63LAAOjaNck3+PRTOP54qF0bZs60zC4gz+icc85Vyvjx0KWLBbknn0xBkFu3rnjN3P33JxTkqgsPdM45lyQzZsC558L69XDHHdCjRwpu8vTTVhG6ZUv4U2Q28Y4077p0zrkkWLjQ1sr99JMtJxgyJAVVuObNg4MPtqxuwgRIQlEM77p0zjlXrhUr4NRTLcidcEKS18oVUYWbbrIg161bUoJcdeEZnXPOJSAvD048Eb74Atq2hU8
"text/plain": [
"<matplotlib.figure.Figure at 0x109e34f90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax1 = plt.subplots()\n",
"\n",
"ax1.plot(x, x**2, lw=2, color=\"blue\")\n",
"ax1.set_ylabel(r\"area $(m^2)$\", fontsize=18, color=\"blue\")\n",
"for label in ax1.get_yticklabels():\n",
" label.set_color(\"blue\")\n",
" \n",
"ax2 = ax1.twinx()\n",
"ax2.plot(x, x**3, lw=2, color=\"red\")\n",
"ax2.set_ylabel(r\"volume $(m^3)$\", fontsize=18, color=\"red\")\n",
"for label in ax2.get_yticklabels():\n",
" label.set_color(\"red\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Axes where x and y is zero"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10a47a110>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.spines['right'].set_color('none')\n",
"ax.spines['top'].set_color('none')\n",
"\n",
"ax.xaxis.set_ticks_position('bottom')\n",
"ax.spines['bottom'].set_position(('data',0)) # set position of x spine to x=0\n",
"\n",
"ax.yaxis.set_ticks_position('left')\n",
"ax.spines['left'].set_position(('data',0)) # set position of y spine to y=0\n",
"\n",
"xx = np.linspace(-0.75, 1., 100)\n",
"ax.plot(xx, xx**3);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Other 2D plot styles"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In addition to the regular `plot` method, there are a number of other functions for generating different kind of plots. See the matplotlib plot gallery for a complete list of available plot types: http://matplotlib.org/gallery.html. Some of the more useful ones are show below:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"n = np.array([0,1,2,3,4,5])"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10aa437d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 4, figsize=(12,3))\n",
"\n",
"axes[0].scatter(xx, xx + 0.25*np.random.randn(len(xx)))\n",
"axes[0].set_title(\"scatter\")\n",
"\n",
"axes[1].step(n, n**2, lw=2)\n",
"axes[1].set_title(\"step\")\n",
"\n",
"axes[2].bar(n, n**2, align=\"center\", width=0.5, alpha=0.5)\n",
"axes[2].set_title(\"bar\")\n",
"\n",
"axes[3].fill_between(x, x**2, x**3, color=\"green\", alpha=0.5);\n",
"axes[3].set_title(\"fill_between\");"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAN8AAADZCAYAAACgoOUxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJztnXd4FNX6x79ns8lutiShJ0F6uQiCFMGGgCj23q6KXsvF7r2Wn6j36lWwIyp2kSKgIB2kiUCQSEiAAAkQOghJCAnpbXez2TLv74/Z3ewmu9mZ2TIL7ud5zpPMzCnvzpx3zplz3vMeRkSIEiVK+FHILUCUKH9VosoXJYpMRJUvShSZiCpflCgyEVW+KFFkIqp8UaLIRFT5okSRiajynUMwxi5kjP3OGKthjB1njN3hdu0axtgRxpjREaer27WOjLFMxlgZY+xJeaSP0pyo8p0jMMaUAFYBWA2gDYAnAcxnjPVhjLUHsALAG45ruwEsdkv+AoCvAHQH8BhjTB1G0aP4QCm3AFEE0w9AChF97jjewhjLBPAwgCIAeUS0HAAYY5MAVDDG+hLRMQAM/IvWGVi4hY/SkmjLd26jAHARgP4A9jtPEpEJwAnHNQD4HMDTAI4CmEVEDWGWM4oXosp37nAUQBljbCJjLJYxdh2AUQA0AHQAapvFr3OcBxGVEdEoIupMRDPDKnUUn0SV7xyBiKwA7gBwM4ASAC8DWAK+y2kAkNAsSSKA+nDKGEUcLLqq4dyFMZYFYI7j8BEiGuk4rwVQDmCw45svSgQSbfnOIRhjAxljasaYhjH2CoBOAOYC+AXARYyxuxwjmW8D2BtVvMgmqnznFg8DKAZQCuBqAOOIyEpE5QDuBvA+gCoAlwC4XzYpowgi2u2MEkUmoi1flCgyEVW+KFFkIqp8UaLIRNS87ByAMRYLIBlACoBUACmMsc5arTY5JiYm1nFdzRhTALARkYXjOLvdbm8wmUwlRFQMfqCmxPG3jIhscv2eKDxR5YsgGGOpAC5RKpXDdTrdGCLqbLFYOigUCk18fLwlOTm5sVu3bujatWscEakHDhzItFotlEolKioq0KlTJzDGYLPZUFRUhISEBFRXV1NBQUHDnj17YDabrRUVFXEGg0EVHx9vVKvVZQqF4lRtbe1Wu92+G8AeIiqT+z78VYiOdsqEu6IlJiaONhqNg2NiYmKHDBnSOHLkSF2vXr1iLr74YnTp0gUdOnRATEyM3zzT09MxZswYv/FsNhtKS0tRUlKCEydOYNeuXdZVq1ZZz5w5o4yJiTHExcXl1tbW/sFx3C4Au4moIuAfHKUFUeULE44u4XC1Wn2XSqX6e2NjY/KAAQMs48aN0wwfPjzmkksuQZcuXcCY9AUHQpXPFxzH4eTJk9i1axdWrFhhKywsNObl5alVKlW+wWBYaLPZfgGwn6KVJihElS+EMMY0AK7V6/X3Wa3W29q2bat46KGH4u68887YESNGQKGI/PEuq9WKLVu2YNasWdaMjAyLwWAwcxy3wmQyLQOQTkQWuWU8V4kqX5BxLHq9LSkp6V8Gg+GKoUOHmu+//379bbfdxnr16iW3eAFBRDh8+DAWLFjALVq0qOHMmTMx8fHxm2tqar4CsImIOLllPKcgomgIQgCQGhsbO1mr1VYNHTq0bs6cOVRVVUXhZMuWLWEtr7S0lKZPn05dunQxarXas0qlciKAdhQBz+NcCLILcC4H8CvCxyQmJq5Tq9Xmm266qXHfvn0kF+FWPiccx9H27dvpvvvuM6rV6ga9Xr8EwHCKgGcUyUF2Ac7FAECtUCie12q1Zy644ALDV199xdXW1lIUorKyMnrhhRfsHTp0MCYmJh4F8CgAJUXAc4u0ILsA51IAoGSMPa7VaivGjRtn+P3334njOIrSEpvNRuvWraNhw4bVazSaEgD3wDHGEA2O+iS3AOdCcHQv79DpdIV9+vQxZWZmUiQiV7ezNTiOo/Xr11Pfvn3rExISDgEYSxHwTCMhyC5ApAcAo/V6fV7v3r3r161bF9EtXSQqnxO73U4LFy6kdu3amfR6fRaAYRQBz1fOILsAkRoA9E9ISNialJRknj17NtntdopkOI6L6BeDk8bGRvrmm2+4pKQkU0JCwhoA3SgCnrccQXYBIi0AUMbFxb2h1WpN06ZNszc2NpJcNDQ0uP4vLCykmTNnuo7z8/Np9uzZHsc//PCD6/jUqVMexydPnqQ5c+a4jk0mExkMhhBJ7h+DwUCvvvqqVaVSmZRK5dN/xe9B2QWIpACgv06nO9SvX7+GU6dOUThpbGykrKws13FJSYmH8ghBTLezsLCQVq5c6To+fvw45eTkiCovGBw4cIAGDBhgSEhIyPqrtYKyC+AhDPA8eFfnZgBz3M73d5yvAlADIBPASLfrkwBYwbvKqwfvs7K72/XbwS+l2Qegj5dylSqV6g2tVmv67rvv7OHovnEcR5s2bXJ1FRsaGmjbtm0B5RnIN199fT39+eefruMdO3bQgQMHApJHKFarld577z2rSqUyxcTEiGoFAfRx1JefHMfdAXBudaEewBtu8Ts66k8ZgCeFlhOKILvCNbuRdzoU5dtmypcIoIdj1JEB+BeAs27X3wbwYyv5ZgNoC+ByAPObXeuv1WqPDB482Bjq1q68vNzVleQ4jjIzMyP2W7KhoYFKSkpcx7m5uVRXVxfSMvfv30/9+/cX1QoC2Ahgq/P5uymfVwUG72TqfvDOhrcDUAspJxQhoix7iWglEa0CUNnsfC0RnSL+7sWAv7klblGcSukL5kgXA4CfO2CMqVSqF7Ra7e6pU6f2ycnJ0XTv3j2Iv6YlmzdvhsXC2yEzxnDFFVdErHG1Wq1GcnKy61ir1aKqqsp17KjIQWXgwIHYt2+f9tVXXx2uVqsPKRSKB1qLzxi7H0A1gM1o+fx93djI2bdCLq338zZ7D24tn9v5GvDdywIAvdzOv+24VgngAICnm6W705FmN4DeAFRarXZhz549je5drWCzbt062rFjR8jyb044pxqmTJkS0gGbjIwM6tChg0mj0XwGIIZa1oUE8C70U8F/djTvdhYBOA3gB7jZm4Lvdm4FcAbAE83zDWeQXdG8CgW86035HNc0AKYAyEHTqowLwbtZYOC7lsUA7veRPlmv1+eOHj26ob6+XkR18A/HcXTy5Mmg5ikGueb5SktLKTs7O+j5lpeX06WXXmrU6XS/A0ggz+f4BYCJ1PTydSqfFsBQ8K1aRwBLAfxGAdbJUATZBfAqlI+Wz+06A78/wSAf118DsMzL+aEajab8zTfftITiW6uoqIg2bNgQ9HwjHavVSrt37w5J3haLhe6+++5GjUZTCMdgGYDBjh5OrOPY1fI1D+C9enMAtN6uyxlkF8DHDfPZ8jmuKwGYAPT2cb2F8jHG/q5WqxsWLlwY1KHMtLQ0Ki8vD2aW5zzLli2j48ePBzXPb7/91q7RaOoAjAO/2acB/Hd/CfgRTRN4lxe+lE/f/JrcQXYBmt2oGABqAB8C+BGAyqFo1zredjGOvv6XAHLd0t0OfkdWBmCEoz//sOOaIj4+/uOOHTsac3NzpTz3Vjlw4EDEWJZEinmZ3W4nk8kU9HzT09NJp9OZHOsGOzpCJwBTwe/Y1M7x/P/m6Ha2A79D72aKgPrdPMgugIcwfPeBaxbeAm8Rf9jxhisBsBBAF7d0PwOocFw/DOB5x3mFVqv9aeDAgcbS0lKJj9yT6upqWrVqVVDyCjaRonzuGAwG+uKLL4KW37FjxyglJcWk0Wg+dPvmd001gZ9GOOloGYvBbyTTkSKgfjcP560bCcaYUq/X/5yamnprdna2OiGh+fZ10qiurobdbkf79u2Dkt9fgcbGRqhUqqDlV1ZWhpEjRxqLi4tnGY3Gl+gcrcSROckUIIyxWL1ev2Lw4ME35+TkBKx4BQUFKCgoAAC0adNGNsUrLCxESUnT9ObKlSuRm5vrcbx3717X8YoVK7B/v2u3aFRWVsJqtYZHWDfcFe/nn3/2mC+UQseOHbFjxw5tp06dntRqtd+zQFy+yYncTW+wA4AYnU63ZtSoUcZgfXdkZGR4GDmHi/Xr13vYe+bm5tKZM2d8xvfW7XQf1d28eTMdOXLEdbxs2TIqKioKjrACqa2tDdr3YFVVFQ0
"text/plain": [
"<matplotlib.figure.Figure at 0x10aa714d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# polar plot using add_axes and polar projection\n",
"fig = plt.figure()\n",
"ax = fig.add_axes([0.0, 0.0, .6, .6], polar=True)\n",
"t = np.linspace(0, 2 * np.pi, 100)\n",
"ax.plot(t, t, color='blue', lw=3);"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAAENCAYAAADNKOnzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X28XFV97/HPFxKIJCQlAalgQ0xsVJKSKPiAjXpstFXvRTTRe8ODIEWBIrY19aotapJGEKr2WqvIkyHlsSohKvVqRWVQ4XorTwFDMGIUVB5DlDwJqPzuH2tNsjPMnDNnMufsfeZ836/XfiWz1t5rr73PzJrfrL322ooIzMzMzMxs8PYouwJmZmZmZiOVg2kzMzMzsw45mDYzMzMz65CDaTMzMzOzDjmYNjMzMzPrkINpMzMzM7MOOZi2YSNpjKQVkjZKekrSK7tYdk3SRR1st1TSjwdYpy/X96DOa2hm1l3ttF+DKOspScd2o6wO9t1R+93hvnY5Z5LeLum3XSh3wO+Jdo6zm39TGz4Opq0lSStz4/CUpCclPSLpu5L+l6R9OihyIXAM8N+BPwT+bxerG3kBQNI3JV3SpbJvJNX3gXZWlnSxpOu7tG8zK4GkKZL+SdLdkn4j6SFJN0h6m6Q9y65fwaAeFtFP2/iHwKruVGnQdmm/2yHpd5JO6GBfHwNe2sF23dDOcQ6qfpLukbRkt2plu21M2RWwyvsO8D9IP7ymAK8A/h44WdIrI+LhQZT1x8AvI+L73a/m0ImI3wKDOc5hJWlsrqOZdYGkPwK+BzwJfBi4Dfgt8KfAe4E1wB2lVXBX6kYhg2zLqyDo4NgjYhuwrfvV6Y4O6jdsT96TJGDPiPjdcO1zpHDPtA3ktxHxcEQ8GBFrI+J84EjgAOCc4oqS3l3oxVkv6R/qPTiSasA/AtNzT/eGnP7afOnrUUm/zv9/cUO5T7v82F/Ps6SVwJ8BJxZ61vsdUiLpjbnuWyVdL+m5hbxdLt9JGivpnyX9XNLjku6XdFXOWwr8JfCqwr5PyHnPkvTvkn4laXvez+EN9Zgv6c58Dm+T9IpcxnE5f1r9fEj6P5K25vOKpItyL8V2ST+RdJakvQplL5X0Y0lvzettk7RK0oSc9iNJmyV9UdLE/s6XWY87DxgLvCgiroqIuyPiJxFxKXA4cA80v2wv6YOSflp4vVLSdbl9/IWkLZLOl7SnpDMk3Stpk6QLJI0tbDdg2Y0kPUfSNZJ+mT/fd0g6vlgXWrSNxXZW0hWS/rNJ+V+TdFnh9Wsl3ZjbnF8oDeOb3N+JlXSIpK/nbe6T9O4m64zN7dWG3Bb+UNIphfyfAXsCl+R6/z6n7yfp8nxOt+c2fXFD2e0M7Ttc0jfy3+rh3E5ObVin/vfcJunrwNQWxTUpXh+S9IDS996/SRrfqn6Snp33/0g+Fz+R9N6cVwNmAEsKf8+pOe9lkr6Tz8Om/Dc9oKEif1s4hq9KOk67fte9XdJvlb4DbwMeB+YrfQ+1fJ/V66Z0lfYj+Rz+StI/Klkm6cGc/pE2z1ulOZi2QYuI+4ErgAX1NKUg8u+A9wPPB/4GOBWoX356M/AJ4Geky4n1gHk88GngZaQg/cfA1wdqkOn/ctlfA98FPp/3NdCQkmcBp5GGoLwc2BdY0c/67wbeChwHPBd4Y6H8jwFXAjcV9v0FSQK+BMwE/hvwEuAh4DpJUwAkHQxcm8t6Iel8frJwvEXnApcBs4Dzc/kP5WN4PvC3wEnAPzQ51hOANwGvJ11puAZ4O/CWQlrjdmajQm57Xg98OiK2NOZHxO8iYnv9Je31DL4EeBEwn/QZPRH4KnAE8OfA8cDbgJOLu2qz7KLxwDeB1wGzgQtJAWdfzm+3bVxJCpqeVU/I/38N8G/59Z+R2rQrgT8htSnTSO1JU7mdWg3sB7wKOCovL2pY9aJc3imk9uwfgXMl/WXOPwL4Pel75g9J7RrAXsCdwNHAC4DlwDJJb29VpyZ1PBSokYb3HQ68Ou/rOkl753WOBv4Z+DgwB/gCqe0f6O8lUjv7B/n4F5GGPb6/n23OI30nzQeeR3qP/CLnvZn0nfpxdv49fyHpD4FvAPeRvmuPIr0fri4c54Jc53OBw/o5hj1IHWd/m/d/CzCB/t9ndW8h/eh5ObAY+CDwNWBvYB7pKs8/SHpdP8c/MkSEFy9NF1KDel2LvNOAp4D9gX1Il6X+vGGdE4BfFV4vBX48wD73ADYBxxbSniq+zmnXASsKr68HLmyV38/+lpIu304ppP0PUuO5V37dl+twUH79SeBb/ZR5MXB9Q9r8XMbzC2l7AfcDH8qvzwI2ACqs8xfF4yd9WT0FnNnGsb0HWN/kWCcX0j4N/K7h+D8J/KDs958XL2UspMD3KeBNbay7S7uT0z4I/LTweiXwIDCmkPYfpKFjYwtpXwK+OMiy22lTv9RO29jQzuxBCtjeW8h/L3Bf4XUNOLuhjKm5nDkt6vKanP/cQtr+wPZ6HYHn5PZ3ZsO2HwZuK7z+LXBCG3+jfwG+0eqckToSftvw97qqoYy9Sd9xb8yvvwdc1rDOxyh8T7SoS614DDntPOCmfup3O7CknzJ/DHy4IW05KZAuvucOy/Wbl1/fCPxbw3YfZdfvurfn13/axnlufJ/VgFsb1vkhsKYh7XbgYwOVX/XFY6atU/WxakHqHX0GcI2k4q/aPYG9JU2JiEebFiI9h9Tr8DLgmaRGfB/av2TWDfc31O8B0vE9k509AEWXkHop7iF9MV0HXBv9j1ueBTwaEXfXEyLiSUn/Dzg0Jx1KCmKL57DV+PL/akyQ9E7gHcAhpB6qMTx9TOEvI2JT4fVDwIMNx/8Q6djNRqOujEFusC52HWf6EPCjhjbjIVIvbMeUbgz/MKm381mkH+x7A98eTDkR8ZSky0m95R/PyW8jXZGsezHw0ibDNIJ0xW5Nk6IPBTZGxD2FfW2U9KPCOkeQ/ga3pI7sHcaQfvi3JGkP4H2kHt+DgXGk4To/62+7Bi8GZkhqvCqxN+m+H0i93lc05N9IuprYn+Dp5+UBUqdJK58ELpD0elKA+tWI+O4A+5kFfL/4nouIOyQ9lvO+l4/h8obtWn3f/KD4os33WbNjfZCn38j/IGnY6IjmYNo6NQv4dUQ8qp3ji98CrG+y7q/6KafeQ3M68HNSb8P3SB/OumY3muxF9zzZ8LoezDYdBhURa/KPgNeSLgH+C7Bc0suiyWXhAXT6xb3LDSqS3krqZX4/cAOwmdTDflbDdo0Bf7RI8xAwG61+TOqNm0XqbevPUzz9Mzy2yXqNQWC0SCt+7totu+hjpGFn7wF+ROrx/QQwaYDtmrkUeJ+kObkefwL8z0K+SJf/L2uy7UOD3FfxOOvn4EhS/YsGGkbxd8AHSEMSbgO2kIYX/LdB1uVSGu4Jypp2Cg1Ss++blu1tRKzMY7JfR/q++Zqk1RHxtn720e7Nme0MI/p9RDTWud33WTvfN9AD3zcOpm0gT/uw5bG9x7FzGqW1pBsTZkTE19stOI8VfgGwOCKuy2nP5um9og+Tehnq2+1N6uH4ST/FP8kQvr8j3XH9JeBLks4m/dp+JWkc5JOkXvmitcAUSS+IiHWw4zheSgqC6+scK2mPiHgqp72szSq9knT5sD7Gut7rb2aDEBGbJH0NOEPSv0bE5mK+0k2CYyONm96lbcpexNPbzU5mXGi37KJXAJdHxNW5rnuQxrkWewPbahsj4i5Jt5B6pPcAbi5eWQNuBmZHxIaByiq4C9hf0nPrvdOS9s91rF9tuyX/e0hEfLWfspq1s68EvhYRK+sJkmYyuPN/M2mYSn/HdRdpZpfPFtL+dBD7GJSIeJA0/GRlfm9eKemvImIrrb9vTlJhpqf8o2gSaahF/RheDpxf2K7d75t23mftGrbZSIbSiP81YENub0kHSjpI0p9I+ivSDSsPkqbII3+gzwbOlnS6pOdJmiVpkaRmv+7rfgU8Apwi6Y8lHQlcBfymYb1vAqflu5NnkxqVsez6y1sNr38KHC5puqT9JXUtsFaaZ/vYfIzPId0Q8jt29spvAJ4v6dC8770i4lukL4srJb08H8elpB72eoN8HnAg8FlJL5D0anb2LA/U4NwN/InSrCQzJP0N6eYUMxu800k9aLdIOiZ/lp+
"text/plain": [
"<matplotlib.figure.Figure at 0x10880b250>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# A histogram\n",
"n = np.random.randn(100000)\n",
"fig, axes = plt.subplots(1, 2, figsize=(12,4))\n",
"\n",
"axes[0].hist(n)\n",
"axes[0].set_title(\"Default histogram\")\n",
"axes[0].set_xlim((min(n), max(n)))\n",
"\n",
"axes[1].hist(n, cumulative=True, bins=50)\n",
"axes[1].set_title(\"Cumulative detailed histogram\")\n",
"axes[1].set_xlim((min(n), max(n)));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Text annotation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Annotating text in matplotlib figures can be done using the `text` function. It supports LaTeX formatting just like axis label texts and titles:"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x109d95550>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(xx, xx**2, xx, xx**3)\n",
"\n",
"ax.text(0.15, 0.2, r\"$y=x^2$\", fontsize=20, color=\"blue\")\n",
"ax.text(0.65, 0.1, r\"$y=x^3$\", fontsize=20, color=\"green\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Figures with multiple subplots and insets"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Axes can be added to a matplotlib Figure canvas manually using `fig.add_axes` or using a sub-figure layout manager such as `subplots`, `subplot2grid`, or `gridspec`:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### subplots"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x109d95950>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(2, 3)\n",
"fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### subplot2grid"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10a33e490>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)\n",
"ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)\n",
"ax3 = plt.subplot2grid((3,3), (1,2), rowspan=2)\n",
"ax4 = plt.subplot2grid((3,3), (2,0))\n",
"ax5 = plt.subplot2grid((3,3), (2,1))\n",
"fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### gridspec"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import matplotlib.gridspec as gridspec"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10a2ce5d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"\n",
"gs = gridspec.GridSpec(2, 3, height_ratios=[2,1], width_ratios=[1,2,1])\n",
"for g in gs:\n",
" ax = fig.add_subplot(g)\n",
" \n",
"fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### add_axes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Manually adding axes with `add_axes` is useful for adding insets to figures:"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10b619090>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.plot(xx, xx**2, xx, xx**3)\n",
"fig.tight_layout()\n",
"\n",
"# inset\n",
"inset_ax = fig.add_axes([0.2, 0.55, 0.35, 0.35]) # X, Y, width, height\n",
"\n",
"inset_ax.plot(xx, xx**2, xx, xx**3)\n",
"inset_ax.set_title('zoom near origin')\n",
"\n",
"# set axis range\n",
"inset_ax.set_xlim(-.2, .2)\n",
"inset_ax.set_ylim(-.005, .01)\n",
"\n",
"# set axis tick locations\n",
"inset_ax.set_yticks([0, 0.005, 0.01])\n",
"inset_ax.set_xticks([-0.1,0,.1]);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Colormap and contour figures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Colormaps and contour figures are useful for plotting functions of two variables. In most of these functions we will use a colormap to encode one dimension of the data. There are a number of predefined colormaps. It is relatively straightforward to define custom colormaps. For a list of pre-defined colormaps, see: http://www.scipy.org/Cookbook/Matplotlib/Show_colormaps"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"alpha = 0.7\n",
"phi_ext = 2 * np.pi * 0.5\n",
"\n",
"def flux_qubit_potential(phi_m, phi_p):\n",
" return 2 + alpha - 2 * np.cos(phi_p) * np.cos(phi_m) - alpha * np.cos(phi_ext - 2*phi_p)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"phi_m = np.linspace(0, 2*np.pi, 100)\n",
"phi_p = np.linspace(0, 2*np.pi, 100)\n",
"X,Y = np.meshgrid(phi_p, phi_m)\n",
"Z = flux_qubit_potential(X, Y).T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### pcolor"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10b55f9d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"p = ax.pcolor(X/(2*np.pi), Y/(2*np.pi), Z, cmap=matplotlib.cm.RdBu, vmin=abs(Z).min(), vmax=abs(Z).max())\n",
"cb = fig.colorbar(p, ax=ax)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### imshow"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10b29ac50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"im = ax.imshow(Z, cmap=matplotlib.cm.RdBu, vmin=abs(Z).min(), vmax=abs(Z).max(), extent=[0, 1, 0, 1])\n",
"im.set_interpolation('bilinear')\n",
"\n",
"cb = fig.colorbar(im, ax=ax)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### contour"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEECAYAAAAmiP8hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXeYHWd59/+ZOb3v2aZt6r3LkizLkmXLBRuwAYNtnNiAKcEvgSTkzQskkJdgQl4gjQDJLyEkEFpMi02oLrjIkmwVy+pWrytt3z29TX1+f4xWlhXJmjnn7GpXOp/r2sve1TzPmXPOzHfu537uIgkhqFGjRo0aVy7y5T6BGjVq1KgxstSEvkaNGjWucGpCX6NGjRpXODWhr1GjRo0rnJrQ16hRo8YVTk3oa9SoUeMKpyb0NWrUqHGFc0mhlyTpDyRJ2iZJUkmSpP+4xLH/W5KkHkmS0pIkfUuSJG/1TrVGjRo1apSDHYu+C/gC8O03OkiSpDuAPwVuASYD04DPV3qCNWrUqFGjMi4p9EKInwkhfg4MXeLQh4B/F0LsF0KkgL8E3l/5KdaoUaNGjUpw4qOXLvHv84Bd5/y+G5ggSVLc8VnVqFGjRo2q4UToL1UUJwykz/k9c+a/EUdnVKNGjRo1qko1LfocED3n99iZ/2YdnVGNGjVq1KgqbgfHXsqifxVYAvzXmd8XA31CiOS5B0mSVCuXWaNGjRplIIS4lMF9QeyEV7okSfJjPRRckiT5JElyXeDQ7wEfkiRp7hm//GeBC4ZjCiFqP0Lwuc99ztZx62+5k0JXd1mvkV33OIUdL9g+3hjsxEj32zq2L1MgU1RtHbvu6ACbTyYcfRYP//sWNh8ZuOzfU7V/iqrOtZ99wtFncSpZ4AfbT9maX9UNOoeyto41S3n00/ttn7va20ni0a+U/d7X3/xWit09to+3e49cDT+VYMd181mggBU6+R6gCPy5JEmTJEnKSpLUcUa8nwL+BngeOAEcBT5X0dnVAEAYBpLrQs9WG0gymA4uEkkGmxeVLEm2L0CvS0bRTfvnAdSFvCRyqqMx44FETqE+7HM0RjFMfG57nlYhBJJk0/ATwvrO7WKaSHL5eZaSLCNMZ9dBjcq5pOtGCPEI8MhF/vl1G61CiH8A/qHis6rxOoRhILudeNleQ3K5EKbuYIAMwt6NKEv2nyEBj4uMotg/D6Al5qc3XXQ0ZjzQmy7REvM7GlPUDAJuew97Uwhkuwt8YYIT4TZ1KNfoACS3G6EbZY+vUR61EgiXkbVr19o6TmgaUplCj8sNhkOht2lxyZKEadOiD3ld5JWLn8eFPouJDUFODORtzT+eODGQZ2JD6KL/fqHPIq8ahLz2BNYwre/GFsJ0ZNELQ0eSKxB6jxtT02wfb/ceqfHG1IT+MmL3IjZVDdlXXjUJyeVB6A6E3uUC057F5ZJlDJsPhajfQ9qh0M9pjXKgO/M/Dx7nHOjOMKf14lHHF/os0iWNmN9ja35DmLhsWulOhVvoOrjtnceFkL3emtBfBmpCP8YRQmCqKrK3TKH3eBC6/RtLkt22XT0uWUK36bup83tIFzVHm0ozWiKcShTecCUwHtl7OsW89tilDzyHZFGjLmBvVWcYArdd341pgBMLXVeRKhB6l8+HWSqVPb5GedSEfoxjFkvIfl/ZG2CSx4fQHNxYDlw9bllGN+xZ9D63TMDjIlWyL9p+j4sFHTFeOZ6wPWask8yrnBoqsKCjztG4wbxKY8jeBq5umrhdNq8XQweXfeEWqoLkdbaRfC6uYACjWBP60aYm9GMcPZ/HFQiUPV7yeBGqg01QlwcMeysAj0vCMO2HfjWFvAzknG3IrpzRyIuHBhyNGctsPjLI0qn1eGxG0ADkVB1TCMI2ffSaE4ve0KyHu02EpiB5nG0kn4srGMTIX3n7LmOdmtCPcfRsDk+k/CoSki+AUBxErrg8oNtzsUiShEuW0Gxa9a1RP90ZZ9bcbQtaeGZvr+2Vw1jnyd093LagxdGY7kyJ1qjfVsikEALNMPDaDcXUVSS3fbegqRSRfOULvTsSRsvmyh5fozxqQj/G0bNZ3JFw2eMlX9CR0EuybPlsbbpvvG6XbaFvj/o57TBcclJDiLZ4gE2HBx2NG4skcgrbTyS4eW6zo3Fd6RLtUXviapgCkGxvxmJo4EDohVJE9gVtH38+nmgUPXPlbbCPdWpCP8ZRkyk8cWf+3HORAyHMosOlsscLuj0Xi9dtPxGqLeZnqKBR1JzFUd+/cjLf2XDM0ZixyH++dII7FrYSthk9M8zxRIEpcXviquhOEqtM0B0KfTGPFLh4aOilcMeiaKn0pQ+sUVVqQj/G0ZJJvPHyKz1LZQi95PEjNHtC73O7UGwmwLhlmUl1AY4lCo7O582LWulLl8b1pmymqPHY1lN88KZpjsalitaDsSVibwNU0Q18NhOr0FRwe+1n0QJmMYdcgdB76+OoieSlD6xRVWpCP8ZRBxN4GyoQeo8PEM42ZD0+UO25WIaF3u6G7MzGEIcGnPlo3S6Zh2+ZwdeeOoDppJzDGOLfnj/CrfNbaLNpmQ9zcCDHjMaQbTFWNAOfx67Ql6zv2gGW0JfvSvQ21KMOjd8H9nilJvRjHGVgEF9zU9njJUlCDkYxC/b9opInYDsk0yVLeGTZtlU/szFMZ6ro2H1z15J2DBOe2N3taNxY4PhAjl/t6OJjb5rpeOy+/izzmu1txptCoOgGfpsWvVCLSF5nEV1mLoMcdpYDcC6+piaUgfG/3zLeqAn9GKfU11eR0API4RhG1oFf1BsAtWjbSg94XRRVe8Ltc8tMqw+yv99ZmwJZlvjUXXP56pMHSRXGT6Ez0xR88eev8qG10x0XMuvNllB1kw6bdXFKmhVtI9sMrXQq9ELXEWqpIh+9v6UZpbev7PE1yqMm9GOcUncv/va2iuZwReowc/b9opLbY9U/sbkhG/C6Kaj2E6GWtMXY0Z12XHp18aQ4dyxq5Qv/vbfisq2jxQ9eOoGim/zu9VMcj93RnWZJW8y226ao6gS99mLihRCg5MFBBI2ZSyGHY0hOql2eh7exAT2bw6hlx44qNaEfwwghKJ7uJlCh0MuROGbGmV9U8oUQir1NU7/bhW4K22GWHTE/siRxIum8MuUf3T6LvlSJb6076njsaLP5yCDfXX+ML9+/GJftcpIWBdXg8GCehS3RSx+Mda3kHQg9ugqS7CiG3sgmcEUqawEtyTL+1haKp8efC248UxP6MYyWTAFUFF4J4Io1YKQdboD5w1Cyt2kqSRIhr5u8Yi+jVpIkVkyMs6XT+aac1+3iK+9ZyuPbTvOL7acdjx8tDnSn+cxPdvG3D1zjeAMWYNvpFHObwwRtZsMquoEsSXhslj4QpRyS39mmqpEaQo41OBpzIYJTJlE42VnxPDXsUxP6MUz++AlCUyc7Cn+7EK66JoyUszICkj+MKGZtu0hCfjc5Rbd9/NzmMFnF4GTSWaglQHPUzz89tJyvP3WQDQf6HY8faTqH8vzR917hz98xn6VT6h2PL6gGu3rSrJho33rOKTphn9v+tVLKWQ9zB5jpQVx1jY7GXIjglEnkjx2veJ4a9qkJ/Rgmd/Aw4ZnTK57HFbeE3pFfezjszqaf3u92Wa3mbCZPyZLEjdMaeP7ooO2a9ucyrTnMP7xnGY88vodf7uhyPH6k2HsqxYf/fQsfuXUmt853VupgmA0nhpg/IWK7LLEpBHlFI+yzd7wQAlHMIAWcldbQE/244s6yei9EeOYMcofGvuvtSuKyCL2p2bf8rmayBw4RnjOr4nmkM3HPomg/fl2SJKRAFGEzLFOSJCJ+D5mS/YiYWY0h/G4Xu8qsOb9wYh3f/L0VfPO5w3ztqYNn0v8vH0/s6uYPv7eNT799Pu+6dmJZc/RmSxwZzLPKwUogr2j4PW77FSuVArg8jvzzAEayrypCH5k7m9yBQxXPczUgDAOjVMJUK4s0K7NtUWU8v+wGqz2e34c7EsEdCeOJRvA2NuJrbsLX3EigrY3g5IkEJk3EEy2/qNd4JrPnVdrvfWfF80iShKt+AvpQL96g/c9SCkYx0/0Qs3dzR/weTifzGKa9xheSJHHrzEZ+vKuLGY0hIj7nl+P05gjf+8gq/uxHO/n9/9jKX927mGa
"text/plain": [
"<matplotlib.figure.Figure at 0x10b545210>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"cnt = ax.contour(Z, cmap=matplotlib.cm.RdBu, vmin=abs(Z).min(), vmax=abs(Z).max(), extent=[0, 1, 0, 1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3D figures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To use 3D graphics in matplotlib, we first need to create an instance of the `Axes3D` class. 3D axes can be added to a matplotlib figure canvas in exactly the same way as 2D axes; or, more conveniently, by passing a `projection='3d'` keyword argument to the `add_axes` or `add_subplot` methods."
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from mpl_toolkits.mplot3d.axes3d import Axes3D"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Surface plots"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10b08b7d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(14,6))\n",
"\n",
"# `ax` is a 3D-aware axis instance because of the projection='3d' keyword argument to add_subplot\n",
"ax = fig.add_subplot(1, 2, 1, projection='3d')\n",
"\n",
"p = ax.plot_surface(X, Y, Z, rstride=4, cstride=4, linewidth=0)\n",
"\n",
"# surface_plot with color grading and color bar\n",
"ax = fig.add_subplot(1, 2, 2, projection='3d')\n",
"p = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=matplotlib.cm.coolwarm, linewidth=0, antialiased=False)\n",
"cb = fig.colorbar(p, shrink=0.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Wire-frame plot"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10b078990>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(8,6))\n",
"\n",
"ax = fig.add_subplot(1, 1, 1, projection='3d')\n",
"\n",
"p = ax.plot_wireframe(X, Y, Z, rstride=4, cstride=4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Coutour plots with projections"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10cc019d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(8,6))\n",
"\n",
"ax = fig.add_subplot(1,1,1, projection='3d')\n",
"\n",
"ax.plot_surface(X, Y, Z, rstride=4, cstride=4, alpha=0.25)\n",
"cset = ax.contour(X, Y, Z, zdir='z', offset=-np.pi, cmap=matplotlib.cm.coolwarm)\n",
"cset = ax.contour(X, Y, Z, zdir='x', offset=-np.pi, cmap=matplotlib.cm.coolwarm)\n",
"cset = ax.contour(X, Y, Z, zdir='y', offset=3*np.pi, cmap=matplotlib.cm.coolwarm)\n",
"\n",
"ax.set_xlim3d(-np.pi, 2*np.pi);\n",
"ax.set_ylim3d(0, 3*np.pi);\n",
"ax.set_zlim3d(-np.pi, 2*np.pi);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Change the view angle"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can change the perspective of a 3D plot using the `view_init` method, which takes two arguments: `elevation` and `azimuth` angle (in degrees):"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<matplotlib.figure.Figure at 0x10c859810>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(12,6))\n",
"\n",
"ax = fig.add_subplot(1,2,1, projection='3d')\n",
"ax.plot_surface(X, Y, Z, rstride=4, cstride=4, alpha=0.25)\n",
"ax.view_init(30, 45)\n",
"\n",
"ax = fig.add_subplot(1,2,2, projection='3d')\n",
"ax.plot_surface(X, Y, Z, rstride=4, cstride=4, alpha=0.25)\n",
"ax.view_init(70, 30)\n",
"\n",
"fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Animations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib also includes a simple API for generating animations for sequences of figures. With the `FuncAnimation` function we can generate a movie file from sequences of figures. The function takes the following arguments: `fig`, a figure canvas, `func`, a function that we provide which updates the figure, `init_func`, a function we provide to setup the figure, `frame`, the number of frames to generate, and `blit`, which tells the animation function to only update parts of the frame which have changed (for smoother animations):\n",
"\n",
" def init():\n",
" # setup figure\n",
"\n",
" def update(frame_counter):\n",
" # update figure for new frame\n",
"\n",
" anim = animation.FuncAnimation(fig, update, init_func=init, frames=200, blit=True)\n",
"\n",
" anim.save('animation.mp4', fps=30) # fps = frames per second\n",
"\n",
"To use the animation features in matplotlib we first need to import the module `matplotlib.animation`:"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from matplotlib import animation"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# solve the ode problem of the double compound pendulum again\n",
"\n",
"from scipy.integrate import odeint\n",
"from numpy import cos, sin\n",
"\n",
"g = 9.82; L = 0.5; m = 0.1\n",
"\n",
"def dx(x, t):\n",
" x1, x2, x3, x4 = x[0], x[1], x[2], x[3]\n",
" \n",
" dx1 = 6.0/(m*L**2) * (2 * x3 - 3 * cos(x1-x2) * x4)/(16 - 9 * cos(x1-x2)**2)\n",
" dx2 = 6.0/(m*L**2) * (8 * x4 - 3 * cos(x1-x2) * x3)/(16 - 9 * cos(x1-x2)**2)\n",
" dx3 = -0.5 * m * L**2 * ( dx1 * dx2 * sin(x1-x2) + 3 * (g/L) * sin(x1))\n",
" dx4 = -0.5 * m * L**2 * (-dx1 * dx2 * sin(x1-x2) + (g/L) * sin(x2))\n",
" return [dx1, dx2, dx3, dx4]\n",
"\n",
"x0 = [np.pi/2, np.pi/2, 0, 0] # initial state\n",
"t = np.linspace(0, 10, 250) # time coordinates\n",
"x = odeint(dx, x0, t) # solve the ODE problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generate an animation that shows the positions of the pendulums as a function of time:"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"fig, ax = plt.subplots(figsize=(5,5))\n",
"\n",
"ax.set_ylim([-1.5, 0.5])\n",
"ax.set_xlim([1, -1])\n",
"\n",
"pendulum1, = ax.plot([], [], color=\"red\", lw=2)\n",
"pendulum2, = ax.plot([], [], color=\"blue\", lw=2)\n",
"\n",
"def init():\n",
" pendulum1.set_data([], [])\n",
" pendulum2.set_data([], [])\n",
" return pendulum1, pendulum2\n",
"\n",
"def update(n): \n",
" # n = frame counter\n",
" # calculate the positions of the pendulums\n",
" x1 = + L * sin(x[n, 0])\n",
" y1 = - L * cos(x[n, 0])\n",
" x2 = x1 + L * sin(x[n, 1])\n",
" y2 = y1 - L * cos(x[n, 1])\n",
" \n",
" \n",
" # update the line data\n",
" pendulum1.set_data([0 ,x1], [0 ,y1])\n",
" pendulum2.set_data([x1,x2], [y1,y2])\n",
" \n",
" return pendulum1, pendulum2\n",
"\n",
"anim = animation.FuncAnimation(fig, update, init_func=init, frames=len(t), blit=True)\n",
"\n",
"# anim.save can be called in a few different ways, some which might or might not work\n",
"# on different platforms and with different versions of matplotlib and video encoders\n",
"#anim.save('animation.mp4', fps=20, extra_args=['-vcodec', 'libx264'], writer=animation.FFMpegWriter())\n",
"#anim.save('animation.mp4', fps=20, extra_args=['-vcodec', 'libx264'])\n",
"anim.save('animation.mp4', fps=20, writer=\"ffmpeg\", codec=\"libx264\")\n",
"#anim.save('animation.mp4', fps=20, writer=\"avconv\", codec=\"libx264\")\n",
"\n",
"plt.close(fig)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note: To generate the movie file we need to have either `ffmpeg` or `avconv` installed. Install it on Ubuntu using:\n",
"\n",
" $ sudo apt-get install ffmpeg\n",
"\n",
"or (newer versions)\n",
"\n",
" $ sudo apt-get install libav-tools\n",
"\n",
"On MacOSX, try: \n",
"\n",
" $ sudo port install ffmpeg"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<video controls alt=\"test\" src=\"data:video/x-m4v;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQABlYptZGF0AAACrwYF//+r\n",
"3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ1NSAwMjFjMGRjIC0gSC4yNjQvTVBF\n",
"Ry00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4u\n",
"b3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFs\n",
"eXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVk\n",
"X3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBk\n",
"ZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEy\n",
"IGxvb2thaGVhZF90aHJlYWRzPTIgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50\n",
"ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MyBi\n",
"X3B5cmFtaWQ9MiBiX2FkYXB0PTEgYl9iaWFzPTAgZGlyZWN0PTEgd2VpZ2h0Yj0xIG9wZW5fZ29w\n",
"PTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yMCBzY2VuZWN1dD00MCBpbnRyYV9y\n",
"ZWZyZXNoPTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0w\n",
"LjYwIHFwbWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAA\n",
"CDhliIQAO//+906/AptFl2oDklcK9sqkJlm5UmsB8qYAAAMAV9H+CyvrADACapK6ArKw5hT578uF\n",
"J69+Vayla3UdyN5CC5xj+zs07maJkq+X9ameCrcBxFJsPXR7Y/WWJKDMk7QpZAAAHAxwgRQr6faa\n",
"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\n",
"iGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAABaAFoAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAA\n",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFkABX/4QAZZ2QAFazZQXC/llhAAAAD\n",
"AEAAAAoDxYtlgAEABmjr48siwAAAABhzdHRzAAAAAAAAAAEAAAD6AAAAAQAAABRzdHNzAAAAAAAA\n",
"AAEAAAABAAAGWGN0dHMAAAAAAAAAyQAAAAEAAAACAAAAAQAAAAUAAAABAAAAAgAAAAEAAAAAAAAA\n",
"AQAAAAEAAAACAAAAAgAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAACAAAAAIAAAAB\n",
"AAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAEAAAACAAAAAQAAAAUAAAABAAAAAgAAAAEA\n",
"AAAAAAAAAQAAAAEAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAFAAAAAQAA\n",
"AAIAAAABAAAAAAAAAAEAAAABAAAABAAAAAIAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAA\n",
"AQAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAQAAAAUAAAABAAAAAgAAAAEAAAAA\n",
"AAAAAQAAAAEAAAAIAAAAAgAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAQAAAAIA\n",
"AAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAA\n",
"AAEAAAABAAAAAQAAAAUAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAEAAAAEAAAA\n",
"AQAAAAIAAAABAAAAAAAAAAQAAAACAAAAAQAAAAUAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAEAAAAE\n",
"AAAAAgAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAQAAAAUAAAABAAAAAgAAAAEA\n",
"AAAAAAAAAQAAAAEAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAFAAAAAQAA\n",
"AAIAAAABAAAAAAAAAAEAAAABAAAAAgAAAAIAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAA\n",
"AQAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAQAAAAIAAAABAAAABQAAAAEAAAAC\n",
"AAAAAQAAAAAAAAABAAAAAQAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAQAAAAIA\n",
"AAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAIAAAACAAAAAQAAAAUAAAABAAAAAgAA\n",
"AAEAAAAAAAAAAQAAAAEAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAQAAAACAAAA\n",
"AQAAAAUAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAEAAAAFAAAAAQAAAAIAAAAB\n",
"AAAAAAAAAAEAAAABAAAAAgAAAAIAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAEA\n",
"AAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAQAAAAUAAAABAAAAAgAAAAEAAAAAAAAAAQAA\n",
"AAEAAAADAAAAAgAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAwAAAAIAAAABAAAA\n",
"BQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAoAAAACAAAAAQAAAAUAAAABAAAAAgAAAAEAAAAA\n",
"AAAAAQAAAAEAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAFAAAAAQAAAAIA\n",
"AAABAAAAAAAAAAEAAAABAAAAAQAAAAIAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAA\n",
"AAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAwAAAAIAAAABAAAABQAAAAEAAAACAAAA\n",
"AQAAAAAAAAABAAAAAQAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEAAAABAAAAAQAAAAIAAAAB\n",
"AAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAEAAAAFAAAAAQAAAAIAAAABAAAAAAAAAAEA\n",
"AAABAAAAAgAAAAIAAAABAAAABQAAAAEAAAACAAAAAQAAAAAAAAABAAAAAQAAAAIAAAACAAAAAQAA\n",
"AAUAAAABAAAAAgAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAgAAABxzdHNjAAAAAAAAAAEAAAABAAAA\n",
"AQAAAAEAAAP8c3RzegAAAAAAAAAAAAAA+gAACu8AAAHyAAAA8QAAAGoAAACoAAABGQAAAYMAAAJc\n",
"AAACUQAAAYQAAAHuAAABMAAAAagAAAG3AAACCQAAAiQAAAH6AAAB7gAAAa4AAAFvAAABkQAAAScA\n",
"AADYAAAA1gAAAnYAAAHtAAABCwAAAPgAAAIqAAABlQAAARkAAAGGAAABwAAAAXkAAAEnAAABPAAA\n",
"AXoAAAGWAAABswAAAigAAAIsAAACIgAAAUIAAAFSAAAB+AAAAV0AAAFRAAABJAAAAgEAAAF2AAAA\n",
"5gAAARsAAAI8AAABagAAAiAAAAIdAAAB0AAAAhsAAAIIAAABoQAAAiIAAAFSAAABUgAAALYAAAIN\n",
"AAACkAAAAbsAAAEbAAAAnQAAAUcAAACdAAAAVwAAAEYAAAKCAAABsQAAAOAAAAFiAAACCwAAAdgA\n",
"AAFzAAABNwAAAXkAAAFfAAABvwAAAXoAAAHxAAACUAAAAeIAAAE0AAAB4wAAAW0AAAHKAAABcQAA\n",
"AUkAAAGIAAAAzgAAANIAAAEjAAACUgAAAkkAAAEqAAABYAAAAi0AAAInAAAB5gAAAZAAAAGvAAAC\n",
"AQAAAdUAAAFyAAABJQAAAasAAAI9AAAB8gAAAaEAAAG8AAABeQAAAgsAAAGjAAABMQAAAasAAAGa\n",
"AAAB4wAAAc4AAAGRAAABzwAAAVwAAAE2AAABDQAAATIAAAH6AAABtAAAAQYAAAF5AAACGwAAAlAA\n",
"AAInAAABuwAAAXsAAAF6AAACJAAAAZ8AAAITAAABIAAAAbYAAAF9AAACDAAAAeIAAAGLAAAA9gAA\n",
"AUUAAAFAAAABjQAAAQ4AAAJbAAAB5gAAAeUAAAHYAAABygAAAPAAAAIZAAAB0QAAAcoAAAEZAAAC\n",
"EgAAAW0AAAFWAAABswAAAO4AAAHDAAABRQAAAWgAAAIMAAABqQAAAZsAAAIKAAAB4AAAAbAAAAHb\n",
"AAABmwAAAVgAAAD/AAAByAAAAXUAAAEmAAABzwAAAa8AAAGnAAABRQAAAakAAAHUAAACSgAAAaYA\n",
"AAJBAAAB/gAAAakAAAFZAAABXwAAAQ4AAAD1AAACUAAAAj8AAAHCAAABiAAAAnIAAAD7AAABzQAA\n",
"AM0AAAHfAAABhQAAAW0AAAFwAAABswAAAYcAAAI9AAABPQAAAYoAAAHSAAACAAAAAXQAAAGbAAAB\n",
"dwAAARsAAADtAAACZgAAAh0AAAFxAAABkAAAAYsAAAJHAAAB5gAAAecAAAGrAAAB7gAAAg0AAAIA\n",
"AAABAQAAAV4AAAFyAAAAdAAAAPIAAABxAAAAdwAAAQwAAADyAAACHAAAAi8AAACwAAACGQAAAaAA\n",
"AAP4c3RjbwAAAAAAAAD6AAAAMAAACx8AAA0RAAAOAgAADmwAAA8UAAAQLQAAEbAAABQMAAAWXQAA\n",
"F+EAABnPAAAa/wAAHKcAAB5eAAAgZwAAIosAACSFAAAmcwAAKCEAACmQAAArIQAALEgAAC0gAAAt\n",
"9gAAMGwAADJZAAAzZAAANFwAADaGAAA4GwAAOTQAADq6AAA8egAAPfMAAD8aAABAVgAAQdAAAENm\n",
"AABFGQAAR0EAAEltAABLjwAATNEAAE4jAABQGwAAUXgAAFLJAABT7QAAVe4AAFdkAABYSgAAWWUA\n",
"AFuhAABdCwAAXysAAGFIAABjGAAAZTMAAGc7AABo3AAAav4AAGxQAABtogAAblgAAHBlAABy9QAA\n",
"dLAAAHXLAAB2aAAAd68AAHhMAAB4owAAeOkAAHtrAAB9HAAAffwAAH9eAACBaQAAg0EAAIS0AACF\n",
"6wAAh2QAAIjDAACKggAAi/wAAI3tAACQPQAAkh8AAJNTAACVNgAAlqMAAJhtAACZ3gAAmycAAJyv\n",
"AACdfQAAnk8AAJ9yAAChxAAApA0AAKU3AACmlwAAqMQAAKrrAACs0QAArmEAALAQAACyEQAAs+YA\n",
"ALVYAAC2fQAAuCgAALplAAC8VwAAvfgAAL+0AADBLQAAwzgAAMTbAADGDAAAx7cAAMlRAADLNAAA\n",
"zQIAAM6TAADQYgAA0b4AANL0AADUAQAA1TMAANctAADY4QAA2ecAANtgAADdewAA38sAAOHyAADj\n",
"rQAA5SgAAOaiAADoxgAA6mUAAOx4AADtmAAA704AAPDLAADy1wAA9LkAAPZEAAD3OgAA+H8AAPm/\n",
"AAD7TAAA/FoAAP61AAEAmwABAoAAAQRYAAEGIgABBxIAAQkrAAEK/AABDMYAAQ3fAAEP8QABEV4A\n",
"ARK0AAEUZwABFVUAARcYAAEYXQABGcUAARvRAAEdegABHxUAASEfAAEi/wABJK8AASaKAAEoJQAB\n",
"KX0AASp8AAEsRAABLbkAAS7fAAEwrgABMl0AATQEAAE1SQABNvIAATjGAAE7EAABPLYAAT73AAFA\n",
"9QABQp4AAUP3AAFFVgABRmQAAUdZAAFJqQABS+gAAU2qAAFPMgABUaQAAVKfAAFUbAABVTkAAVcY\n",
"AAFYnQABWgoAAVt6AAFdLQABXrQAAWDxAAFiLgABY7gAAWWKAAFnigABaP4AAWqZAAFsEAABbSsA\n",
"AW4YAAFwfgABcpsAAXQMAAF1nAABdycAAXluAAF7VAABfTsAAX7mAAGA1AABguEAAYThAAGF4gAB\n",
"h0AAAYiyAAGJJgABihgAAYqJAAGLAAABjAwAAYz+AAGPGgABkUkAAZH5AAGUEgAAAF91ZHRhAAAA\n",
"V21ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAKmlsc3QAAAAiqXRv\n",
"bwAAABpkYXRhAAAAAQAAAABMYXZmNTYuMS4w\n",
"\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Display animation using HTML element\n",
"\n",
"from IPython.display import HTML\n",
"\n",
"HTML(\"\"\"\n",
" <video alt=\"test\" controls>\n",
" <source src=\"animation.mp4\" type=\"video/mp4\">\n",
" </video>\n",
"\"\"\")\n",
"\n",
"# OR use Video class\n",
"\n",
"#from IPython.display import Video\n",
"#Video(\"animation.mp4\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Backends"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib has a number of \"backends\" which are responsible for rendering graphs. The different backends are able to generate graphics with different formats and display/event loops. There is a distinction between noninteractive backends (such as 'agg', 'svg', 'pdf', etc.) that are only used to generate image files (e.g. with the `savefig` function), and interactive backends (such as Qt4Agg, GTK, MaxOSX) that can display a GUI window for interactively exploring figures. \n",
"\n",
"A list of available backends are:"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[u'GTK', u'GTKAgg', u'GTKCairo', u'MacOSX', u'Qt4Agg', u'Qt5Agg', u'TkAgg', u'WX', u'WXAgg', u'CocoaAgg', u'GTK3Cairo', u'GTK3Agg', u'WebAgg', u'nbAgg', u'agg', u'cairo', u'emf', u'gdk', u'pdf', u'pgf', u'ps', u'svg', u'template']\n"
]
}
],
"source": [
"print(matplotlib.rcsetup.all_backends)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The default backend, called `agg`, is based on a library for raster graphics which is great for generating raster formats like PNG.\n",
"\n",
"Normally we don't need to bother with changing the default backend; but sometimes it can be useful to switch to, for example, PDF or GTKCairo (if you are using Linux) to produce high-quality vector graphics instead of raster based graphics. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Generating SVG with the svg backend"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#\n",
"# RESTART THE NOTEBOOK: the matplotlib backend can only be selected before pylab is imported!\n",
"# (e.g. Kernel > Restart)\n",
"# \n",
"import matplotlib\n",
"matplotlib.use('svg')\n",
"import matplotlib.pylab as plt\n",
"import numpy\n",
"from IPython.display import Image, SVG"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#\n",
"# Now we are using the svg backend to produce SVG vector graphics\n",
"#\n",
"fig, ax = plt.subplots()\n",
"t = numpy.linspace(0, 10, 100)\n",
"ax.plot(t, numpy.cos(t)*numpy.sin(t))\n",
"plt.savefig(\"test.svg\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/svg+xml": "<svg height=\"432pt\" version=\"1.1\" viewBox=\"0 0 576 432\" width=\"576pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n <style type=\"text/css\">\n*{stroke-linecap:butt;stroke-linejoin:round;}\n </style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\" M0 432 L576 432 L576 0 L0 0 z \" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\" M72 388.8 L518.4 388.8 L518.4 43.2 L72 43.2 z \" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p7ff5b81e1d)\" d=\" M72 216 L76.5091 187.107 L81.0182 159.388 L85.5273 133.973 L90.0364 111.893 L94.5455 94.0485 L99.0545 81.1638 L103.564 73.7633 L108.073 72.1482 L112.582 76.3839 L117.091 86.2984 L121.6 101.488 L126.109 121.336 L130.618 145.034 L135.127 171.618 L139.636 200.007 L144.145 229.047 L148.655 257.557 L153.164 284.376 L157.673 308.413 L162.182 328.693 L166.691 344.388 L171.2 354.862 L175.709 359.687 L180.218 358.668 L184.727 351.847 L189.236 339.5 L193.745 322.13 L198.255 300.443 L202.764 275.322 L207.273 247.787 L211.782 218.96 L216.291 190.013 L220.8 162.122 L225.309 136.423 L229.818 113.961 L234.327 95.6485 L238.836 82.2314 L243.345 74.2552 L247.855 72.0443 L252.364 75.6886 L256.873 85.0398 L261.382 99.7176 L265.891 119.125 L270.4 142.473 L274.909 168.811 L279.418 197.069 L283.927 226.096 L288.436 254.713 L292.945 281.756 L297.455 306.124 L301.964 326.826 L306.473 343.02 L310.982 354.049 L315.491 359.462 L320 359.04 L324.509 352.8 L329.018 340.996 L333.527 324.108 L338.036 302.823 L342.545 278.007 L347.055 250.668 L351.564 221.919 L356.073 192.93 L360.582 164.879 L365.091 138.907 L369.6 116.071 L374.109 97.2993 L378.618 83.3556 L383.127 74.8071 L387.636 72.0013 L392.145 75.0525 L396.655 83.8365 L401.164 97.9961 L405.673 116.955 L410.182 139.943 L414.691 166.024 L419.2 194.138 L423.709 223.141 L428.218 251.854 L432.727 279.108 L437.236 303.796 L441.745 324.912 L446.255 341.599 L450.764 353.177 L455.273 359.176 L459.782 359.351 L464.291 353.696 L468.8 342.44 L473.309 326.041 L477.818 305.166 L482.327 280.665 L486.836 253.534 L491.345 224.876 L495.855 195.857 L500.364 167.657 L504.873 141.424 L509.382 118.224 L513.891 99.0003 L518.4 84.5359\" style=\"fill:none;stroke:#0000ff;stroke-linecap:square;\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\" M72 43.2 L518.4 43.2\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\" M518.4 388.8 L518.4 43.2\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\" M72 388.8 L518.4 388.8\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\" M72 388.8 L72 43.2\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_2\">\n <defs>\n <path d=\" M0 0 L0 -4\" id=\"m93b0483c22\" style=\"stroke:#000000;stroke-width:0.5;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.5;\" x=\"72.0\" xlink:href=\"#m93b0483c22\" y=\"388.8\"/>\n </g>\n </g>\n <g id=\"line2d_3\">\n <defs>\n <path d=\" M0 0 L0 4\" id=\"m741efc42ff\" style=\"stroke:#000000;stroke-width:0.5;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.5;\" x=\"72.0\" xlink:href=\"#m741efc42ff\" y=\"43.2\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 0 -->\n <defs>\n <path d=\" M31.7812 66.4062 Q24.1719 66.4062 20.3281 58.9062 Q16.5 51.4219 16.5 36.375 Q16.5 21.3906 20.3281 13.8906 Q24.1719 6.39062 31.7812 6.39062 Q39.4531 6.39062 43.2812 13.8906 Q47.125 21.3906 47.125 36.375 Q47.125 51.4219 43.2812 58.9062 Q39.4531 66.4062 31.7812 66.4062 M31.7812 74.2188 Q44.0469 74.2188 50.5156 64.5156 Q56.9844 54.8281 56.9844 36.375 Q56.9844 17.9688 50.5156 8.26562 Q44.0469 -1.4
"text/plain": [
"<IPython.core.display.SVG object>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#\n",
"# Show the produced SVG file. \n",
"#\n",
"SVG(filename=\"test.svg\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### The IPython notebook inline backend"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When we use IPython notebook it is convenient to use a matplotlib backend that outputs the graphics embedded in the notebook file. To activate this backend, somewhere in the beginning on the notebook, we add:\n",
"\n",
" %matplotlib inline\n",
"\n",
"It is also possible to activate inline matplotlib plotting with:\n",
"\n",
" %pylab inline\n",
"\n",
"The difference is that `%pylab inline` imports a number of packages into the global address space (scipy, numpy), while `%matplotlib inline` only sets up inline plotting. In new notebooks created for IPython 1.0+, I would recommend using `%matplotlib inline`, since it is tidier and you have more control over which packages are imported and how. Commonly, scipy and numpy are imported separately with:\n",
"\n",
" import numpy as np\n",
" import scipy as sp\n",
" import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The inline backend has a number of configuration options that can be set by using the IPython magic command `%config` to update settings in `InlineBackend`. For example, we can switch to SVG figures or higher resolution figures with either:\n",
"\n",
" %config InlineBackend.figure_format='svg'\n",
" \n",
"or:\n",
"\n",
" %config InlineBackend.figure_format='retina'\n",
" \n",
"For more information, type:\n",
"\n",
" %config InlineBackend"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"%config InlineBackend.figure_format='svg'\n",
"\n",
"import matplotlib.pylab as plt\n",
"import numpy"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (http://matplotlib.org/) -->\n<svg height=\"256pt\" version=\"1.1\" viewBox=\"0 0 381 256\" width=\"381pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <defs>\n <style type=\"text/css\">\n*{stroke-linecap:butt;stroke-linejoin:round;}\n </style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"\nM0 256.117\nL381.344 256.117\nL381.344 0\nL0 0\nL0 256.117\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"\nM33.8625 235.239\nL368.663 235.239\nL368.663 12.0391\nL33.8625 12.0391\nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p33057e3db6)\" d=\"\nM33.8625 123.639\nL37.2443 104.979\nL40.6261 87.0774\nL44.008 70.6631\nL47.3898 56.4035\nL50.7716 44.8787\nL54.1534 36.5573\nL57.5352 31.7779\nL60.917 30.7347\nL64.2989 33.4704\nL67.6807 39.8735\nL71.0625 49.6836\nL74.4443 62.5018\nL77.8261 77.8066\nL81.208 94.9756\nL84.5898 113.31\nL87.9716 132.065\nL91.3534 150.478\nL94.7352 167.798\nL98.117 183.323\nL101.499 196.42\nL104.881 206.556\nL108.263 213.321\nL111.644 216.437\nL115.026 215.779\nL118.408 211.374\nL121.79 203.399\nL125.172 192.181\nL128.553 178.175\nL131.935 161.951\nL135.317 144.168\nL138.699 125.551\nL142.081 106.856\nL145.463 88.843\nL148.844 72.2456\nL152.226 57.7386\nL155.608 45.912\nL158.99 37.2469\nL162.372 32.0956\nL165.753 30.6677\nL169.135 33.0213\nL172.517 39.0606\nL175.899 48.54\nL179.281 61.074\nL182.663 76.1527\nL186.044 93.1629\nL189.426 111.413\nL192.808 130.16\nL196.19 148.641\nL199.572 166.106\nL202.953 181.844\nL206.335 195.214\nL209.717 205.673\nL213.099 212.795\nL216.481 216.291\nL219.863 216.019\nL223.244 211.989\nL226.626 204.366\nL230.008 193.459\nL233.39 179.712\nL236.772 163.685\nL240.153 146.029\nL243.535 127.462\nL246.917 108.74\nL250.299 90.6233\nL253.681 73.8499\nL257.063 59.1016\nL260.444 46.9782\nL263.826 37.9729\nL267.208 32.452\nL270.59 30.6399\nL273.972 32.6105\nL277.353 38.2835\nL280.735 47.4282\nL284.117 59.6727\nL287.499 74.5189\nL290.881 91.3631\nL294.263 109.52\nL297.644 128.251\nL301.026 146.795\nL304.408 164.396\nL307.79 180.341\nL311.172 193.978\nL314.553 204.755\nL317.935 212.233\nL321.317 216.107\nL324.699 216.22\nL328.081 212.567\nL331.463 205.298\nL334.844 194.707\nL338.226 181.226\nL341.608 165.402\nL344.99 147.88\nL348.372 129.371\nL351.753 110.63\nL355.135 92.4176\nL358.517 75.4752\nL361.899 60.4918\nL365.281 48.0768\nL368.663 38.7352\" style=\"fill:none;stroke:#0000ff;stroke-linecap:square;\"/>\n </g>\n <g id=\"patch_3\">\n <path d=\"\nM33.8625 12.0391\nL368.663 12.0391\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_4\">\n <path d=\"\nM368.663 235.239\nL368.663 12.0391\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_5\">\n <path d=\"\nM33.8625 235.239\nL368.663 235.239\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"patch_6\">\n <path d=\"\nM33.8625 235.239\nL33.8625 12.0391\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_2\">\n <defs>\n <path d=\"\nM0 0\nL0 -4\" id=\"m93b0483c22\" style=\"stroke:#000000;stroke-width:0.5;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.5;\" x=\"33.8625\" xlink:href=\"#m93b0483c22\" y=\"235.2390625\"/>\n </g>\n </g>\n <g id=\"line2d_3\">\n <defs>\n <path d=\"\nM0 0\nL0 4\" id=\"m741efc42ff\" style=\"stroke:#000000;stroke-width:0.5;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.5;\" x=\"33.8625\" xlink:href=\"#m741efc42ff\" y=\"12.0390625\"/>\n </g>\n
"text/plain": [
"<matplotlib.figure.Figure at 0x1085c4890>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#\n",
"# Now we are using the SVG vector graphics displaced inline in the notebook\n",
"#\n",
"fig, ax = plt.subplots()\n",
"t = numpy.linspace(0, 10, 100)\n",
"ax.plot(t, numpy.cos(t)*numpy.sin(t))\n",
"plt.savefig(\"test.svg\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Interactive backend (this makes more sense in a python script file)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#\n",
"# RESTART THE NOTEBOOK: the matplotlib backend can only be selected before pylab is imported!\n",
"# (e.g. Kernel > Restart)\n",
"# \n",
"import matplotlib\n",
"matplotlib.use('Qt4Agg') # or for example MacOSX\n",
"import matplotlib.pylab as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Now, open an interactive plot window with the Qt4Agg backend\n",
"fig, ax = plt.subplots()\n",
"t = np.linspace(0, 10, 100)\n",
"ax.plot(t, np.cos(t) * np.sin(t))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that when we use an interactive backend, we must call `plt.show()` to make the figure appear on the screen."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Further reading"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* http://www.matplotlib.org - The project web page for matplotlib.\n",
"* https://github.com/matplotlib/matplotlib - The source code for matplotlib.\n",
"* http://matplotlib.org/gallery.html - A large gallery showcaseing various types of plots matplotlib can create. Highly recommended! \n",
"* http://www.loria.fr/~rougier/teaching/matplotlib - A good matplotlib tutorial.\n",
"* http://scipy-lectures.github.io/matplotlib/matplotlib.html - Another good matplotlib reference.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Versions"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/json": {
"Software versions": [
{
"module": "Python",
"version": "2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)]"
},
{
"module": "IPython",
"version": "3.2.1"
},
{
"module": "OS",
"version": "Darwin 14.1.0 x86_64 i386 64bit"
},
{
"module": "numpy",
"version": "1.9.2"
},
{
"module": "scipy",
"version": "0.16.0"
},
{
"module": "matplotlib",
"version": "1.4.3"
}
]
},
"text/html": [
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>Python</td><td>2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)]</td></tr><tr><td>IPython</td><td>3.2.1</td></tr><tr><td>OS</td><td>Darwin 14.1.0 x86_64 i386 64bit</td></tr><tr><td>numpy</td><td>1.9.2</td></tr><tr><td>scipy</td><td>0.16.0</td></tr><tr><td>matplotlib</td><td>1.4.3</td></tr><tr><td colspan='2'>Sat Aug 15 11:30:23 2015 JST</td></tr></table>"
],
"text/latex": [
"\\begin{tabular}{|l|l|}\\hline\n",
"{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n",
"Python & 2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)] \\\\ \\hline\n",
"IPython & 3.2.1 \\\\ \\hline\n",
"OS & Darwin 14.1.0 x86\\_64 i386 64bit \\\\ \\hline\n",
"numpy & 1.9.2 \\\\ \\hline\n",
"scipy & 0.16.0 \\\\ \\hline\n",
"matplotlib & 1.4.3 \\\\ \\hline\n",
"\\hline \\multicolumn{2}{|l|}{Sat Aug 15 11:30:23 2015 JST} \\\\ \\hline\n",
"\\end{tabular}\n"
],
"text/plain": [
"Software versions\n",
"Python 2.7.10 64bit [GCC 4.2.1 (Apple Inc. build 5577)]\n",
"IPython 3.2.1\n",
"OS Darwin 14.1.0 x86_64 i386 64bit\n",
"numpy 1.9.2\n",
"scipy 0.16.0\n",
"matplotlib 1.4.3\n",
"Sat Aug 15 11:30:23 2015 JST"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%reload_ext version_information\n",
"%version_information numpy, scipy, matplotlib"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.8.10 64-bit",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "3.8.10"
},
"vscode": {
"interpreter": {
"hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1"
}
}
},
"nbformat": 4,
"nbformat_minor": 0
}