matplotlibであそぼう【Python】
三度目の投稿、”とりすてぃっく”です。
皆さん関数愛してますか?
私は大好きです。
今回は、いろんな関数が描けちゃう"matplotlib"であそんでいきます。
今回使用したソフトは、『PyScripter』です。
ちなみに、今回の見出し画像は『パチンコフォントメーカー』と、
『GIMP』で10分ぐらいで作りました。
かなり背景について悩みました。
↑ パチンコフォントメーカー
<そもそも"matplotlib"ってなに?>
"matplotlib"は、『Python』内で使うモジュールです。
これを使うと、グラフを作ることができます。
例えば…
こんな感じのグラフを作ることができます。
数値は気象庁のホームページから持ってきました。
以下、コードです。
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"は、"θ"のことだよ。
以上、面白い関数の紹介を終わります。
これを見た皆さんも、関数を描いてみませんか?
面白いですよ!