Matplotlib Plot

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

External

Internal

Overview

import matplotlib.pyplot as plt
plt.style.use('seaborn-v0_8-whitegrid')
fig, ax = plt.subplots() # this returns a Figure instance and one or an array of matplotlib.axes.Axes instances
fig.suptitle('Something')
ax.set_xlabel('length')
ax.set_ylabel('height')

x = [1, 2, 3]
y = [10, 23, 4]
x2 = [1, 2, 3]
y2 = [11, 25, 6]

ax.plot(x, y, 'g', x2, y2, 'b', lw=0.5, color='indigo')
plt.show() # not needed in Jupyter

Difference between Plot and Scatter

Difference between Plot and Scatter

Input Data

The coordinates of the points or line nodes are given by the x and y lists, which must have the same size, otherwise a runtime error occurs.

plot([x], y, [fmt], ...)

fmt is a format string.

Multiple Series

If multiple pairs of x/y arguments are provided, multiple lines are plotted:

def plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

Style

To set globally, see:

Visualization Style

Format String

Color "r" for red.

Line Width, Color, Style, Marker

Use style properties:

ax.plot(x, y, linewidth=0.5)
ax.plot(x, y, lw=0.5)
ax.plot(x, y, color='green', marker='o', linestyle='dashed', linewidth=2, markersize=12)

The fmt argument, which is a convenient way for defining basic formatting like color, marker and lifestyle, can be mixed with style properties.

ax.plot(x, y, 'g', marker='o', linestyle='dashed', linewidth=2, markersize=12)

Marker

'o' (dots), '*' (stars), 's' (square).

Multiple Series Formatting

The series are specified as array pairs:

# first line green, second blue
ax.plot(x, y, 'g', x2, y2, 'b', lw=0.5)

The series are Pandas Series:

s = ...
s2 = ...
ax.plot(s)
ax.plot(s2)

Axes

If some axis attribute needs to be set, after it was created, the x axis and the y axis of the matplotlib.axes.Axes object can be accessed with the ax.xaxis and ax.yaxis:

import matplotlib as mp
ax.xaxis.set_minor_locator(mp.ticker.AutoMinorLocator())

Labels

ax.set_xlabel('length')
ax.set_ylabel('height')

When the date labels overlap on the horizontal axis, use this:

fig.autofmt_xdate()

To format individual values corresponding to minor and major tickers:

import matplotlib.ticker as pt
...
ax.xaxis.set_major_formatter(pt.FormatStrFormatter('% 1.2f')) 
ax.xaxis.set_minor_formatter(pt.FormatStrFormatter('% 1.2f')) 
ax.yaxis.set_major_formatter(pt.FormatStrFormatter('% 1.2f')) 
ax.yaxis.set_minor_formatter(pt.FormatStrFormatter('% 1.2f'))

To format percentages:

ax.xaxis.set_major_formatter(pt.PercentFormatter())

Grid Lines

Title

fig, ax = plt.subplots()
fig.suptitle('Something')

Using a Plot with Pandas Series

Using a Plot with Pandas Series