メキシカンハット(3Dグラフ、等高線)

3次元で Mexican hat を描いてみます:

import numpy as np
import matplotlib.pyplot as plt

def hat(x, y):
    r = x**2 + y**2
    return(np.exp(-r/2) * (1 - r/2) / np.pi)

t = np.linspace(-4, 4)
x, y = np.meshgrid(t, t)
z = hat(x, y)

plt.figure(figsize=(8, 6))
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')
Mexican hat

対話型環境なら、マウスでぐりぐりできます。

等高線を描くには plt.contour を使います:

plt.contour(x, y, z) # 塗りつぶすなら plt.contourf(x, y, z)

いろいろ指定できます:

plt.figure(figsize=(6.4, 6.4))
cs = plt.contour(x, y, z, levels=[-0.06,-0.04,-0.02,0,0.1,0.2,0.3])
plt.axis("scaled")  # または plt.axis("equal")
cs.clabel()  # あるいは例えば cs.clabel([-0.04,0,0.2], fmt="%g")
Mexican hat

fmt=... オプションは、例えば "%.2f" なら小数第2位までに揃えて表示、"%g" なら精度を保ちできるだけ短い表示にします。