matplotlibでサーファイスプロットする
schwefel.png:
- surf = ax.plot_surface(x, y, z)
- 三次元プロット
- fig.colorbar(surf)
- カラーバーの表示
- plot_surface関数のキーワード(一部)
- cmap: カラーマップの指定 (hot, gray, coolwarm など)
- cstride: x方向の色のプロットのステップ数(デフォルト値: 10)
- rstride: y方向の色のプロットのステップ数(デフォルト値: 10)
- colorbar関数のキーワード
- shrink: カラーバーを縦の長さを何倍にするか (デフォルト値: 1.0)
- aspect: カラーバーの横の長さ(値が大きいほど細くなる) (デフォルト値: 20)
#!/usr/bin/env python #coding:utf-8 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt import numpy as np def schwefel(x, y): return 418.9829 * 2 - (x * np.sin(np.sqrt(abs(x))) + \ y * np.sin(np.sqrt(abs(y)))) def work(): N = 100 MIN_X = -500 MAX_X = 500 x = np.linspace(MIN_X, MAX_X, N) y = np.linspace(MIN_X, MAX_X, N) x, y = np.meshgrid(x, y) z = schwefel(x, y) fig = plt.figure() ax = fig.add_subplot(1, 1, 1, projection="3d") surf = ax.plot_surface(x, y, z, cstride=1, rstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False) fig.colorbar(surf, shrink=0.5, aspect=10) ax.set_title("Schwefel") fig.savefig("schwefel.png", bbox_inches="tight") if __name__ == "__main__": work()