メキシカンハット

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

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

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)

fig = plt.figure(figsize=(8,5))
ax = Axes3D(fig)
ax.plot_surface(x, y, z)

plt.savefig('mexican.png', bbox_inches="tight")
Mexican hat

マウスでぐりぐりできます(うまくいかなければプロットの説明を参考にして backend を変えてみてください。うちでは Qt5Agg でうまくいっています)。

Axes3D をインポートしないでも,ax = ... の行を

ax = fig.gca(projection='3d')

または

ax = fig.add_subplot(111, projection='3d')

のようにするだけでも3次元になります。

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

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

いろいろ指定できます:

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")

plt.savefig('mexican2.png', bbox_inches="tight")
Mexican hat

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


Last modified: