前回、matplotlibで方眼紙の様な正方形グリッドが作れたら、数学の関数グラフも容易に作れます。
matplotlibはデータをプロットするライブラリなので式をそのままグラフにするのはひと工夫必要です。
今度はオブジェクト指向で関数グラフを作り、一次関数をプロットします。
# オブジェクト指向でグラフ作成
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
# これで正方形になります。
ax.set_aspect('equal', adjustable='box')
# 表示する幅
ax.set_xlim(-10, 11)
ax.set_ylim(-10, 11)
# グラフの刻み
ax.set_xticks(np.arange(-10, 10, 5))
ax.set_yticks(np.arange(-10, 10, 5))
# 補助線をonにします
ax.minorticks_on()
# グリッドの主線と補助線
ax.grid(which="major", color="black", alpha=0.5)
ax.grid(which="minor", color="gray", linestyle="--", alpha=0.5)
# 数値表示を0に合わせます。
ax.spines['bottom'].set_position("zero")
ax.spines['left'].set_position("zero")
関数グラフの方眼紙が出来たら、後は一次関数のデータを生成する関数を作ればいいだけ。
# 一次関数のデータを作る関数
def linear(a, b, ran=np.arange(-10,10)):
arr = []
for x in ran:
y = x*a + b
arr.append(y)
# 式から配列データを返します。
return arr
これを応用すれば二次関数や他の関数もプロットできますね。
[完成形]
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
# 一次関数のデータを作る関数
def linear(a, b, ran=np.arange(-10,10)):
arr = []
for x in ran:
y = x*a + b
arr.append(y)
# 式から配列データを返します。
return arr
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
# これで正方形になります。
ax.set_aspect('equal', adjustable='box')
# 表示する幅
ax.set_xlim(-10, 11)
ax.set_ylim(-10, 11)
# グラフの刻み
ax.set_xticks(np.arange(-10, 10, 5))
ax.set_yticks(np.arange(-10, 10, 5))
# 補助線をonにします
ax.minorticks_on()
# グリッドの主線と補助線
ax.grid(which="major", color="black", alpha=0.5)
ax.grid(which="minor", color="gray", linestyle="--", alpha=0.5)
# 数値表示を0に合わせます。
ax.spines['bottom'].set_position("zero")
ax.spines['left'].set_position("zero")
x = np.arange(-10, 10)
# y = 2x + 3の一次関数を生成
y = linear(2, 3, x)
ax.plot(x, y)
plt.show()

0 件のコメント:
コメントを投稿