# Plotting of Functions of 2 Variables¶

In [3]:
%matplotlib inline
import numpy as np


## Contour plots¶

In [6]:
from math import pi
import matplotlib.pyplot as plt
from numpy import meshgrid, sin, cos, linspace

N = 50
x = linspace(-pi, pi, N)
y = linspace(-pi, pi, N)
X, Y = meshgrid(x,y)
Z = sin(X) * cos(Y)

plt.contour(X, Y, Z)
plt.axis('equal')
plt.show()

In [9]:
from math import pi
import matplotlib.pyplot as plt
from numpy import meshgrid, sin, cos, linspace

N = 50
x = linspace(-pi, pi, N)
y = linspace(-pi, pi, N)
X, Y = meshgrid(x,y)
Z = sin(X) * cos(Y)

plt.contourf(X, Y, Z)
plt.axis('equal')
plt.show()


## Pseudocolor plots¶

Plot the function $f(x,y)=x^2âˆ’y^2$ on the domain $[âˆ’2,2]Ã—[âˆ’2,2]$.

In [9]:
x, y = np.meshgrid(np.linspace(-2, 2, 100),
np.linspace(-2, 2, 100))

f = x**2 - y**2

In [10]:
plt.figure()
plt.xlim(-2, 2)
plt.ylim(-2, 2)
plt.pcolormesh(x, y, f)
plt.show()


This is a good start! However, something about this is asthetically unsatisfying...it doesn't do a good job highlighting an important aspect of the function...the zero set. Let's see how we can make a quick change to improve this.

In [11]:
plt.figure()
plt.xlim(-2, 2)
plt.ylim(-2, 2)
plt.pcolormesh(x, y, f, cmap='RdBu')
plt.show()


As an aside, Matplotlib supports a number of different colormaps. Some of these have particular purposes. There are three general classes called sequential, diverging and qualitative. In this case, we are using the fact the diverging colormaps are good at highlighting a distinct central value in a dataset. If you're interested, you can learn more about this here.

## Wireframe plots¶

In [3]:
from math import pi
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as mpl3
from numpy import meshgrid, sin, cos, linspace

N = 50
x = linspace(-pi, pi, N)
y = linspace(-pi, pi, N)
X, Y = meshgrid(x,y)
Z = sin(X) * cos(Y)

fig = plt.figure()
ax = mpl3.Axes3D(fig)
ax.plot_wireframe(X, Y, Z)
plt.show()


## Surface plots¶

In [4]:
from math import pi
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as mpl3
from numpy import meshgrid, sin, cos, linspace

N = 50
x = linspace(-pi, pi, N)
y = linspace(-pi, pi, N)
X, Y = meshgrid(x,y)
Z = sin(X) * cos(Y)

fig = plt.figure()
ax = mpl3.Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=3, cstride=3, color='g')
plt.show()