matplotlibでグラフを描画する

Scrapboxの数学メモにグラフが欲しいと思い、グラフ描画自体はGoogle検索でもWolframでも可能なのでいい時代になったのですが、スクショするよりもこの際手元で出力したほうが良いかなと思い、Pythonのmatplotlibを使ってみることにしました。

Anacondaのインストール

わざわざAnaconda入れなくてもよくね?と思っていたのですが、Pythonのパッケージ管理はかなり混沌としていて素直にAnacondaを入れたほうが早かったです。インストール方法はQiitaを参考に。

Anaconda-4.2.0-python3環境構築(Mac) – Qiita 

自分の環境だとpyenvで3系を入れるときのエラーがXcodeを入れ直しても解消されなかったのでここを参考にしたらインストールできました。

久々のPythonでしたがnpmに慣れるとPythonのパッケージ管理のカオス具合にはびっくりしますね…。

三角関数を描画してみる

import numpy as np
import matplotlib.pyplot as plt

# 等差数列の設定
x = np.arange(-2*np.pi, 2*np.pi, 0.1)

# グラフの描画範囲
plt.xlim(-2*np.pi, 2*np.pi)
plt.ylim(-1.2, 1.2)

# 計算式
y_sin = np.sin(x)
y_cos = np.cos(x)
y_tan = np.tan(x)

# プロット
plt.plot(x, y_sin, label="sin")
plt.plot(x, y_cos, linestyle="--", label="cos")
plt.plot(x, y_tan, marker='s', linestyle='None', label="tan")

# 目盛りの書き換え
plt.xticks([-2*np.pi, -3*np.pi/2, -np.pi, -np.pi/2, 0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi],
            [r"-$2\pi$", r"$-\frac{3\pi}{2}$", r"$-\pi$", r"$-\frac{\pi}{2}$", "0", r"$\frac{\pi}{2}$", r"$\pi$", r"$\frac{3\pi}{2}$", r"$2\pi$"]) 

# 凡例の描画
plt.xlabel("x") 
plt.ylabel("y")
plt.title("sin & cos & tan")
plt.legend() #描画

# 画像の出力
plt.savefig("plot1.png")

# 描画実行
plt.show()

結果

tan(x)の描画は線だと漸近線が描画されてしまうので、線ではなくマーカーでの描画にすると良いっぽいです。(参考: numpy と matplotlib で三角関数をグラフで表示 – Qiita)

PythonでLaTeXを使う場合には\のエスケープをしないといけないですが文字列の前にrをつけるとraw文字列として扱ってくれるので書くのが楽になるみたいです。(参考: MatplotlibのLaTeXにrがいる: 長続き目指しブログ)

他には以下のサイトを参考にさせていただきました。

様々な種類のグラフが描画できるので公式のgalleryなどを見ながら少しずつ覚えていく感じですね。