見出し画像

matplotlibであそぼう【Python】

三度目の投稿、”とりすてぃっく”です。
皆さん関数愛してますか?
私は大好きです。

今回は、いろんな関数が描けちゃう"matplotlib"であそんでいきます。

今回使用したソフトは、『PyScripter』です。

ちなみに、今回の見出し画像は『パチンコフォントメーカー』と、
『GIMP』で10分ぐらいで作りました。
かなり背景について悩みました。

 ↑ パチンコフォントメーカー


<そもそも"matplotlib"ってなに?>

"matplotlib"は、『Python』内で使うモジュールです。
これを使うと、グラフを作ることができます。

例えば…

2022年の東京

こんな感じのグラフを作ることができます。

数値は気象庁のホームページから持ってきました。

以下、コードです。

import numpy as np
import matplotlib.pyplot as plt

month = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
temperature = np.array([4.9, 5.2, 10.9, 15.3, 18.8, 23.0, 27.4, 27.5, 24.4, 17.2, 14.5, 7.5])
precipitation = np.array([22.5, 71.0, 110.5, 224.5, 198.0, 64.0, 233.0, 105.0, 310.0, 118.0, 102.5, 56.5])

fig, ax_t = plt.subplots()
ax_t.plot(month, temperature, "ro-", label="temperature")
ax_t.set_ylabel("℃")
ax_t.set_xlabel("month")
ax_t.set_ylim(0, 30)

ax_p = ax_t.twinx()
ax_p.bar(month, precipitation, label="precipitation")
ax_p.set_ylabel("mm")

ax_p.set_zorder(1)
ax_t.set_zorder(2)
ax_t.patch.set_alpha(0)

handler1, label1 = ax_t.get_legend_handles_labels()
handler2, label2 = ax_p.get_legend_handles_labels()
ax_t.legend(handler1+handler2, label1+label2, borderaxespad=0)

plt.show()

とまあ、こんな感じで"matplotlib"は折れ線グラフや棒グラフなどが
作れちゃうすごいやつなんですが、
なんと、関数のグラフも描けちゃいます!

<関数のグラフを描いてみよう>

今回描いたのは、こんな感じのグラフです。

直交座標系

これは、

$$
y = 2x+2\\y = \frac{1}{2}x^2
$$

これらの関数のグラフです。

コードはこんな感じです。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 200)
y1 = 2*x + 2
y2 = x**2 / 2

plt.plot(x, y1, label="2x+2")
plt.plot(x, y2, label="x^2 * (1/2)")

plt.legend(loc="upper right")
plt.xlim(-10,10)
plt.ylim(-10,10)
plt.grid()
plt.show()

これのかなり雑な解説をしていきます。

根幹となる関数の部分は、

x = np.linspace(-10, 10, 200)
y1 = 2*x + 2
y2 = x**2 / 2

この3行だけです。

1番上は、変数 x に -10から10までを 200分割した数列を入れるというものです。
もっと簡単に言うと、

$$
-10 \leqq x \leqq 10
$$

こういうことです。

2行目と3行目は、関数について書かれています。

この3行を要約すると、

$${-10 \leqq x \leqq 10}$$の範囲の、

$$
y = 2x+2\\y = \frac{1}{2}x^2
$$

この2つの関数があるよ。

っていう感じです。

これらを描画するときは、

plt.plot(x, y1, label="2x+2")
plt.plot(x, y2, label="x^2 * (1/2)")

この2つのコードを書くだけです。

自分の好きな関数を描画したいときは、
ここで紹介したところをちょっといじるだけでいいよ!

他の詳しいところは、ご自身で調べて下さい。

<面白いグラフ集>

ここからは、個人的に面白いと思ったグラフを紹介していきます。

ちょっと複雑なやつが多いかもしれません。

まずはコレ!

富士山

2000年に静岡大学で出題された伝説の入試問題。
問題を解いていくと、このグラフが現れます。

関数は、

$$
y = x^4-x^2+6  (|x| \leqq 1) \\
y = \frac{12}{|x|+1}  (|x| > 1) \\
y = \frac{1}{2} \cos (2 \pi x)+\frac{7}{2}  (|x| \leqq 2)
$$

この3つです。(絶対値の場合分けをすると4つ)

かなりユニークで面白い問題ですよね。

次はコレ!

カージオイド

ハート型の関数です。

$$
\begin{cases}
x = (1+ \cos \theta) \cos x \\
y = (1+ \cos \theta) \sin x
\end{cases}
$$

詳しく知りたい方は、媒介変数表示(パラメータ表示)で調べてみよう!

やり方は、コードの関数を記述する部分を

theta = np.linspace(0, 2 * np.pi, 10000)

x = (1 + np.cos(theta)) * np.cos(theta)
y = (1 + np.cos(theta)) * np.sin(theta)

こんな風にするだけです。

ちなみに、"theta"は、"θ"のことだよ。

以上、面白い関数の紹介を終わります。

これを見た皆さんも、関数を描いてみませんか?
面白いですよ!

いいなと思ったら応援しよう!

この記事が参加している募集