matplotlibで等高線を書く その2

schwefel.png:

  1. CS = ax.contour(x, y, z, <等高線の領域数>)
    • 等高線図をプロット
  2. ax.clabel(CS)
    • 各等高線に値を記入
  • contour関数のオプション (一部)
    • cmap: カラーマップ
  • clabel関数のオプション (一部)
    • fontsize: フォントの大きさ
    • inline: True なら、値の周りの等高線を消す (デフォルトはTrue)
    • colors: 値の色を設定 (何も設定しない場合、等高線と同じ色となる)
#!/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)

    CS = ax.contour(x, y, z, 5, cmap=cm.coolwarm)
    ax.clabel(CS, fontsize=9, inline=False, colors="black")

    ax.set_title("Schwefel")

    fig.savefig("schwefel.png", bbox_inches="tight")
    

if __name__ == "__main__":
    work()