In [1]:
%run ../../common_functions/import_all.py

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

from common_functions.setup_notebook import set_css_style, setup_matplotlib, config_ipython
config_ipython()
setup_matplotlib()
set_css_style()
Out[1]:

Some simple notes on Matplotlib functionalities

A line plot

In [2]:
x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.title('Sine function', fontweight='bold', fontsize=16)
plt.show();
#plt.savefig('sine.png')     # to save

# type of markers, line, can be set as kwargs in plot()

a 3D plot

In [3]:
x = np.array([i for i in range(-100, 100)])
y = np.array([i for i in range(-100, 100)])
x, y = np.meshgrid(x, y)

def f(x, y):
    return x**2 + y**2

fig = plt.figure()
ax = fig.gca(projection='3d')
parabola = ax.plot_surface(x, y, f(x, y), cmap=cm.RdPu)
plt.xlabel('x')
plt.ylabel('y')

plt.show();

A bar plot

In [4]:
# Some dummy data
data = {'a': 10, 'b': 20, 'c': 15, 'd': 25}

plt.bar([i for i in range(len(data.keys()))], data.values())   # does not read str xtics directly, have to set xticks
plt.xticks([i for i in range(len(data.keys()))], data.keys())
plt.show();

# there are also other types, like scatter plot or hist

Using log scales

In [5]:
# Exp in semilog
x = np.linspace(0, 1, 100)
#plt.semilogy(x, np.exp(x))

# pow law in log-log
x = np.linspace(0, 1, 100)
plt.loglog(x, x**(-0.6))

plt.show();
/Users/martina/Desktop/Mallzee/repos/plantation/venv/lib/python3.7/site-packages/ipykernel_launcher.py:7: RuntimeWarning: divide by zero encountered in power
  import sys

Setting a customised legend

In [6]:
x = np.linspace(0, 10)
sin_line, = plt.plot(x, np.sin(x), label='sin(x)')
cos_line, = plt.plot(x, np.cos(x), label='cos(x)')
#plt.legend(handler_map={sin_line: HandlerLine2D(numpoints=2)}, loc=4)    # with the Handler
plt.legend(loc=4)
plt.title('Sin and cos', fontweight='bold', fontsize=16)
plt.xlabel('x')
plt.show();

Plotting errorbars

In [7]:
plt.errorbar([i for i in range(10)], 
             [i for i in range(10)], 
             yerr=[i for i in range(10)], label='avg')
plt.show();

Amesome: can use xkcd's style!

In order to make this work best, the proper font of xkcd, Humor Sans has to be downloaded on the system. You can find it here (on a Mac, just double click on the downloaded file and click install).

Then, you should clear the font cache of Matplotlib otherwise it does not pick up newly installed fonts:

rm ~/.matplotlib/fontList.cache

You may also need to clear the cached font_manager Matplotlib instance, so better run

rm ~/.matplotlib/fontList.py3k.cache

This will clear our everything and make sure Matplotlib rebuilds its font cache the next time it is imported.

In [8]:
matplotlib.rcParams.update({"text.usetex": False})

plt.xkcd() 
plt.plot([i for i in range(10)], np.sin([i for i in range(10)]))
plt.title('A sine wave')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show();

References

  1. A great article on xkcd arriving to Matplotlib on Pythonic Perambulations, by Jake VanderPlas (great blog btw!)
  2. Matplotlib's own showcase of the xkcd style
In [ ]: