2022年6月11日土曜日

matplotlibで一次関数グラフを作る

前回、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")
 

今回はオブジェクト指向のプロットなので若干書き方が違います。特に正方形にするには set_aspect('equal', adjustable='box')という指定をします。 またグラフの数値を0に合わせるため、spines.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 件のコメント:

コメントを投稿