Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

Python (Python 3) で数学をやるにはどうしたらいいか。その18. 簡単なグラフ。"ティーンスピリットっていうデオドラント使ってるんだな!"

このシリーズの過去記事は以下にまとめてある

py3math.hatenablog.com

当記事について

当ブログ筆者も、Python で数学をやるにはどうしたらいいか悩んでいた時期があるから、昔の自分に向けて書いたような記事。

対象とする読者

Python の入門書を一冊か二冊、一通りやった人で、Python の基本的な構文や基本的な用語がだいたいわかっている人。

そして、公式サイトを読む努力をちゃんとする人。

簡単なグラフの作成

SymPy の plot() を使用して簡単なグラフを作成してみよう (マシンに matplotlib がすでに入っているという前提で話を進めていく)。

当記事では、y = x^2, y = 2x^2, y = -3x^2 の 3 つの関数 (以下、関数という言葉はプログラミングの関数と混同しやすいため、数式と表現する) を使用する。

では、早速、Python の対話モードから:

>>> import sympy as sym
>>> x = sym.Symbol('x')

まず、最も簡単な方法で 1 つのグラフを作成してみる。

数式: y = x^2:

>>> sym.plot(x**2)

f:id:my_notes:20180609125717p:plain

SymPy の plot() にそのまま数式 (の右辺) を渡せばいいわけだ。

この基本的な方法がわかれば、あとは一括処理してみよう。

リストに使用する数式をまとめる。

>>> y_list = [x**2, 2*x**2, -3*x**2]

そして:

>>> sym.plot(*y_list)

(* でアンパックしないとエラーになることには注意しよう)。

f:id:my_notes:20180609125741p:plain

グラフの体裁を少しだけ整えてみよう。

まずはコードとグラフを眺めてみてほしい。

p = sym.plot(*y_list, title='y = ax^2', legend=True, show=False)
p[0].line_color = 'r'
p[1].line_color = 'g'
p[2].line_color = 'b'
p.show()

f:id:my_notes:20180609125758p:plain

1 行目の

>>> p = sym.plot(*y_list, title='y = ax^2', legend=True, show=False)

は、第 1 引数に *y_list で各数式を渡している。

次に、title='y = ax^2' でグラフにタイトルを付けている。

次に、legend=True で凡例を添える指定をしている。

次に、show=False で、ここではまだグラフを表示しない、と抑制している。

2 行目から 4 行目までの

>>> p[0].line_color = 'r'
>>> p[1].line_color = 'g'
>>> p[2].line_color = 'b'

は、r, g, b (red, green, blue) として色を順に指定している。

最後の

>>> p.show()

でグラフを表示している。

その他にもグラフの体裁の整え方はある。SymPy の公式サイトに詳しい。

SymPy の plot() は、数式をそのまま渡せばいいから楽なのだが、扱いにくい面もたくさんある。

混み入ったグラフを作成したい場合は、matplotlib や Seaborn の使用を考えたほうがよいだろう。

その場合には、SymPy 自体が扱いにくくなることも多々あるから、NumPy や SciPy の使用を考えていく。

いずれ当シリーズも NumPy や SciPy を使用していく。

(つづく)。

グラフ関連の過去記事

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

py3math.hatenablog.com

他にもいろいろ書いていると思うが参考まで。

参考文献 (数式を参考)

チャート式体系数学2代数編―中高一貫教育をサポートする

チャート式体系数学2代数編―中高一貫教育をサポートする