{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting Started With Matplotlib\n", "\n", "[back to overview page](index.ipynb)\n", "\n", "This page is about the general mechanics of plotting with [Matplotlib](http://matplotlib.org/), not so much about the plots themselves.\n", "For more information about those, have a look at the [overview page](index.ipynb) and especially at the [external links section](index.ipynb#External-Links)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Outdated Information\n", "\n", "Matplotlib has been very actively developed in the last few years.\n", "Many improvements have been made and the API as well as the recommended usage patterns have changed quite a bit.\n", "\n", "Sadly, this also means that a lot of documentation out there is outdated and may actually, although well intended, be bad advice.\n", "In fact, this very page may be outdated at the time you are reading it!\n", "Have a look at this date:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2022-09-17\r\n" ] } ], "source": [ "!date +%F" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the date of the last change to this page.\n", "If it's older then half a year or a year, it is very likely to be outdated, so don't read it!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial Setup\n", "\n", "You should create a file named `matplotlibrc`\n", "in the same directory as your notebook file(s),\n", "containing this line:\n", "\n", " figure.dpi: 96\n", "\n", "For more details, see [Default Values for Matplotlib's \"inline\" backend](matplotlib-inline-defaults.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting Step by Step\n", "\n", "There are several different ways of using Matplotlib, here we provide mainly slow-paced step-by-step instructions that show explicitly what has to be done in order to create a plot.\n", "\n", "These instructions should help you to create your own individualized plotting functions (see below).\n", "\n", "You can also use Matplotlib in a much less explicit and quicker-to-type way called \"pylab\" (see further below)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Importing Matplotlib\n", "\n", "There are several ways to do that, some of which are *not recommended* anymore (especially `from pylab import *`).\n", "\n", "As far as I know, this is the canonical and recommended way to import Matplotlib for most use cases:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For some specialized cases, you can also import specific classes from certain `matplotlib` sub-modules, e.g.\n", "\n", " from matplotlib.patches import Polygon, Ellipse\n", " from matplotlib.colors import LinearSegmentedColormap\n", "\n", "There are lots of code examples out there that still use them, but the following imports are [not recommended anymore](https://matplotlib.org/3.6.0/api/index.html#module-pylab) and you should **never use any of these**:\n", "\n", "
\n", "from pylab import *\n", "from matplotlib.pyplot import *\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A Quick Plot\n", "\n", "If you are in a hurry and just need to plot a few values ..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "data = 4, 8, 15, 16, 23, 42" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... you can do it like this:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "