Matplotlib: plotting (translation), matplotlibplotting
Thanks
Thank you very much for reviewing and correcting Bill Wing and Christoph Deil.
Author:Nicolas Rougier, Mike Müller, Ga ë l Varoquaux
Content of this chapter:
- Introduction
- Simple plotting
- Graphics, subgraphs, axes, and scales
- Other types of graphics: examples and exercises
- Content not included in the tutorial
- Quick Reference
4.1 Introduction
Matplotlib may be the most commonly used Python package in two-dimensional graphics. It provides a very fast way to visualize Pyhton data and a number of formatted images that can be released. We need to explore Matplotlib in interactive mode in most common cases.
4.1.1 IPython and Matplotlib Modes
Ipython is an enhanced interactive Python Shell. It has many interesting functions, including naming input and output, accessing Shell commands, improved debugging, and more. It is the core of the scientific computing workflow in Pyhton and is used together with Matplotlib.
For interactive Matplotlib sessions with similar functions of Matlab/Mathematica, we use IPython and its special Matplotlib mode to enable non-blocking plotting.
When Ipython console is used, we start IPython with the command line parameter matplotlib (the-pylab command is used in very old versions)
IPthon notebook in IPthon notebook, we insert the following magic function at the beginning of notebook: % matplotlib inline
4.1.2 pyplot
Pyplot provides a program interface for the matplotlib object-oriented Drawing Library. It is a modeling tool close to Matlab. Therefore, most plot commands in plot have similar Matlab simulation parameters. Important commands are explained using interactive examples.
from matplotlib import pyplot as plt
4.2 simple plotting
In this section, we will plot the cosine and sine functions on the same graph. We will gradually enrich the graph from the default settings to make it better.
Step 1: Obtain the sine and Cosine functions.
import numpy as npX = np.linspace(-np.pi, np.pi, 256, endpoint=True)C, S = np.cos(X), np.sin(X)
X is now a numpy array with 256 values ranging from-π to + π (including), and C is the cosine (256 values ), S is a sine (256 values ).
To run this example, you can type it in IPython interactive session:
$ ipython --pylab
This leads us to the IPython Command Prompt:
IPython 0.13 -- An enhanced Interactive Python.? -> Introduction to IPython's features.%magic -> Information about IPython's 'magic' % functions.help -> Python's own help system.object? -> Details about 'object'. ?object also works, ?? prints more.Welcome to pylab, a matplotlib-based Python environment.For more information, type 'help(pylab)'.
You can also download each example and run it using regular Python commands, but you will lose the interactive data operation.
$ python exercice_1.py
You can click the corresponding graph to obtain the source of each step.
4.2.1 use the default settings for plotting
Documentation
- Plot tutorial
- Plot () command
import numpy as npimport matplotlib.pyplot as pltX = np.linspace(-np.pi, np.pi, 256, endpoint=True)C, S = np.cos(X), np.sin(X)plt.plot(X, C)plt.plot(X, S)plt.show()
4.2.2 default instantiation
Documentation
import numpy as npimport matplotlib.pyplot as plt# Create a figure of size 8x6 inches, 80 dots per inchplt.figure(figsize=(8, 6), dpi=80)# Create a new subplot from a grid of 1x1plt.subplot(1, 1, 1)X = np.linspace(-np.pi, np.pi, 256, endpoint=True)C, S = np.cos(X), np.sin(X)# Plot cosine with a blue continuous line of width 1 (pixels)plt.plot(X, C, color="blue", linewidth=1.0, linestyle="-")# Plot sine with a green continuous line of width 1 (pixels)plt.plot(X, S, color="green", linewidth=1.0, linestyle="-")# Set x limitsplt.xlim(-4.0, 4.0)# Set x ticksplt.xticks(np.linspace(-4, 4, 9, endpoint=True))# Set y limitsplt.ylim(-1.0, 1.0)# Set y ticksplt.yticks(np.linspace(-1, 1, 5, endpoint=True))# Save figure using 72 dots per inch# plt.savefig("exercice_2.png", dpi=72)# Show result on screenplt.show()
4.2.3 Change Color and line width
Documentation
- Controlling line properties
- Line API
In the first step, we need to set the cosine function to blue, the sine function to red, and set them to a slightly rough line. We will also slightly change the size to make it more horizontal.
...plt.figure(figsize=(10, 6), dpi=80)plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")...
4.2.4 set the limit value
Documentation
- Xlim () command
- Ylim () command
The current image's limit value is a little compact. We want some space to clearly view all data points.
...plt.xlim(X.min() * 1.1, X.max() * 1.1)plt.ylim(C.min() * 1.1, C.max() * 1.1)...
4.2.5 set the scale value
Documentation
- Xticks () command
- Yticks () command
- Tick container
- Tick locating and formatting
...plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])plt.yticks([-1, 0, +1])...
4.2.6 set the scale mark
Documentation
- Working with text
- Xticks () command
- Yticks () command
- Set_xticklabels ()
- Set_yticklabels ()
...plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])plt.yticks([-1, 0, +1],[r'$-1$', r'$0$', r'$+1$'])...
4.2.7 motion spin
Documentation
- Spines
- Axis container
- Transformations tutorial
...ax = plt.gca() # gca stands for 'get current axis'ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.xaxis.set_ticks_position('bottom')ax.spines['bottom'].set_position(('data',0))ax.yaxis.set_ticks_position('left')ax.spines['left'].set_position(('data',0))...
4.2.8 Add a legend
Documentation
- Legend guide
- Legend () command
- Legend API
...plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")plt.legend(loc='upper left')...
4.2.9 notes
Documentation
- Annotating axis
- Annotate () command
...t = 2 * np.pi / 3plt.plot([t, t], [0, np.cos(t)], color='blue', linewidth=2.5, linestyle="--")plt.scatter([t, ], [np.cos(t), ], 50, color='blue')plt.annotate(r'$sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',xy=(t, np.sin(t)), xycoords='data',xytext=(+10, +30), textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))plt.plot([t, t],[0, np.sin(t)], color='red', linewidth=2.5, linestyle="--")plt.scatter([t, ],[np.sin(t), ], 50, color='red')plt.annotate(r'$cos(\frac{2\pi}{3})=-\frac{1}{2}$',xy=(t, np.cos(t)), xycoords='data',xytext=(-90, -50), textcoords='offset points', fontsize=16,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))...
4.2.10