見出し画像

Python で関数を定義してグラフを描くまで

 Python で関数を定義すること、引き続いてグラフの作り方を学びましょう。関数とグラフはプログラミングの技術で言うとなかなかそこそこのレベルだと思いますが、中学数学・高校数学の定番ですから中学生・高校生には案外扱いやすいのではないかという気もします。

グラフの描き方

 初めにグラフの描き方を説明しましょう。グラフを描くためには、モジュール「matplotlib.pyplot」を import するのが良いでしょう。ただ名前が長いので、これ以降のコードで短く書くために「plt」という略記号で書き表すことにします。次のコードの as(〜として)がその宣言です。plt と略称するのが Python 界隈で標準になっていますので、ここでもそれに従います。

import matplotlib.pyplot as plt

 ところで、グラフと言っても様々ありますが、使いやすいのは棒グラフ(ヒストグラム)と散布図でしょう。単純に x 座標(順番・時間)と y 座標(量・高さ)を与えてやれば良いからです。それに対して、折れ線グラフでは隣との関係を、円グラフでは全体像を指定しなければならない分、一手間増えます。

plt.scatter(x座標,y座標)    # ← 散布図
plt.bar(x座標,y座標)        # ← 棒グラフ

plt.plot([x座標],[y座標])   # ← 折れ線(x座標,y座標をリスト形式で与える)
plt.pie([量])              # ← 円グラフ(量をリスト形式で与える)  ※BitArrowは未対応

 そして一通りデータが揃って、グラフを描く段になったら「plt.show()」の命令を送ります。

plt.show()

 すなわち、コード全体の構成は次のようになります。要は、これでグラフが描けます。

import matplotlib.pyplot as plt
         :
plt.scatter(x座標,y座標)
         :
plt.show()

 実際には「plt.bar(x座標,y座標)」だったり、その部分を for 文または while 文で何度か回したり、あるいは関数を定義 def したりしたりすることもあるでしょう。

関数の定義の仕方

 次に関数の説明です。プログラミング界で「関数」と言うとき、それは「名前のついた処理手順」のことで、コード本体とは別建てで置いて、コード本体から呼び出すと、結果を返してくる代物です。
 具体例を2つ示しましょう。

def f(x):                   # ┐ 関数に名前をつけて、
    y=2*x+3                 # │ 関数式を定義して、 
    return y                # ┘ 値を返す

import matplotlib.pyplot as plt
for x in range(20):
    plt.scatter(x,f(x))     # ここで点の座標を覚えて、
plt.show()                  # 最後に一気に表示する

(関数を自ら定義した)↓ $${y=2x+3}$$

(他のライブラリの関数を使った)↑ $${y=\sin{x}}$$

import matplotlib.pyplot as plt
import math                 # math(数学)ライブラリをインポートして、
for i in range(100):
    x=i/10
    y=math.sin(x)           # mathライブラリにあるsin関数を使った
    plt.scatter(x,y)
plt.show()

【実習】

 ではここから3つほど、関数を定義してグラフを描くところまでやってみてください。

(1) $${y=\sqrt{x}}$$
(2) $${y=|x|}$$
(3) $${y=n!}$$

 (1) は math ライブラリをインポートして math.sqrt(x) でもできますし、(2) は 組込み関数 abs(x) でもできますが、ここでは def 文の中で、(1) はべき乗 ** を使って、(2) は if 文を使って場合分けしてやってみてください。
 なお (3) では def 文を使うと逆に複雑になります。def 文を使うより、コード本体で for 文で回す間に掛け算して、その場ですぐに plt.scatter で点の座標を覚えさせた方が何かと好都合です。では、どうぞ。


def f(x):
    y=x**0.5
    return y

import matplotlib.pyplot as plt
for x in range(100):
    plt.scatter(x,f(x))
plt.show()

     $${y=\sqrt{x}}$$ ↓

↑ $${y=|x|}$$     

def f(x):
    if x>0:
        return x
    else:
        return -x

import matplotlib.pyplot as plt
for x in range(-10,11):
    plt.scatter(x,f(x))
plt.show()
import matplotlib.pyplot as plt
y=1
for x in range(1,11):
    y=y*x
    print(x,"!=",y)
    plt.scatter(x,y)
plt.show()

↓ $${y=n!}$$

◇      ◇      ◇

Python でグラフを描く 〜 
▷ 関数を定義してグラフを描くまで       
▷ Python で味わう、意外な確率          
▷ 再帰関数  ▷ シェルピンスキーのギャスケット

この記事が気に入ったらサポートをしてみませんか?