{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"___\n",
"\n",
"\n",
"___\n",
"\n",
"# MATPLOTLIB\n",
"\n",
"----\n",
"## Matplotlib Basics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib is the \"grandfather\" library of data visualization with Python. It was created by John Hunter. He created it to try to replicate MatLab's (another programming language) plotting capabilities in Python. So if you happen to be familiar with matlab, matplotlib will feel natural to you.\n",
"\n",
"It is an excellent 2D and 3D graphics library for generating scientific figures. \n",
"\n",
"Some of the major Pros of Matplotlib are:\n",
"\n",
"* Generally easy to get started for simple plots\n",
"* Support for custom labels and texts\n",
"* Great control of every element in a figure\n",
"* High-quality output in many formats\n",
"* Very customizable in general\n",
"\n",
"Matplotlib allows you to create reproducible figures programmatically. Let's learn how to use it! Before continuing this lecture, I encourage you just to explore the official Matplotlib web page: http://matplotlib.org/\n",
"\n",
"## Installation \n",
"\n",
"If you are using our environment, its already installed for you. If you are not using our environment (not recommended), you'll need to install matplotlib first with either:\n",
"\n",
" conda install matplotlib\n",
"or\n",
"\n",
" pip install matplotlib\n",
" \n",
"## Importing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import the `matplotlib.pyplot` module under the name `plt` (the tidy way):"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# COMMON MISTAKE!\n",
"# DON'T FORGET THE .PYPLOT part\n",
"\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**NOTE: If you are using an older version of jupyter, you need to run a \"magic\" command to see the plots inline with the notebook. Users of jupyter notebook 1.0 and above, don't need to run the cell below:**"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**NOTE: For users running .py scripts in an IDE like PyCharm or Sublime Text Editor. You will not see the plots in a notebook, instead if you are using another editor, you'll use: *plt.show()* at the end of all your plotting commands to have the figure pop up in another window.**"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Basic Example\n",
"\n",
"Let's walk through a very simple example using two numpy arrays:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Basic Array Plot\n",
"\n",
"Let's walk through a very simple example using two numpy arrays. You can also use lists, but most likely you'll be passing numpy arrays or pandas columns (which essentially also behave like arrays).\n",
"\n",
"**The data we want to plot:**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"x = np.arange(0,10)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"y = 2*x"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Using Matplotlib with plt.plot() function calls\n",
"\n",
"## Basic Matplotlib Commands\n",
"\n",
"We can create a very simple line plot using the following ( I encourage you to pause and use Shift+Tab along the way to check out the document strings for the functions we are using)."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"