matplotlib.pyplot.plot 編
Python の Matplotlib で初等関数のグラフを描く際は,NumPy の関数を使う。
例えば,$\sqrt{x} = $ np.sqrt(x)
,$\sin x = $ np.sin(x)
等々。
import matplotlib.pyplot as plt
import numpy as np
# 以下はグラフを SVG で Notebook にインライン表示させる設定
%config InlineBackend.figure_formats = ['svg']
# グラフのサイズ
plt.rcParams["figure.figsize"] = (6, 4.5)
べき関数
$y = x^{-2}, \ x^{-1}, \ x^2, \ x^3$ のグラフ例。
x = np.linspace(-5, 5, 100)
plt.plot(x, x**(-2), linewidth = 2, label="$x^{-2}$")
plt.plot(x, x**(-1), linewidth = 2, label="$x^{-1}$")
plt.plot(x, x**2, linewidth = 2, label="$x^2$")
plt.plot(x, x**3, linewidth = 2, label="$x^3$")
# 横軸縦軸の表示範囲
plt.xlim(-5, 5)
plt.ylim(-5, 5)
# x の目盛を 1 刻みに。linspace を使う例。
plt.xticks(np.linspace(-5, 5, 11))
# y の目盛を 1 刻みに。arange を使う例。
plt.yticks(np.arange(-5, 6, 1))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
$y=x^{-1}$ のグラフの $x=0$ 付近,$y \rightarrow -\infty$ と $y \rightarrow +\infty$ を縦の直線でつないでしまう。
$\displaystyle y = \sqrt{x}, \ \frac{1}{\sqrt{x}}$ のグラフ例。
# x = 0 は除く。
x = np.linspace(0.001, 5, 500)
plt.plot(x, np.sqrt(x), linewidth = 2, label="$\sqrt{x}$")
plt.plot(x, 1/np.sqrt(x), linewidth = 2, label="$1/\sqrt{x}$")
# 横軸縦軸の表示範囲
plt.xlim(0, 5)
plt.ylim(0, 5)
# x の目盛を 1 刻みに。
plt.xticks(np.linspace(0, 5, 6))
# y の目盛を 1 刻みに。
plt.yticks(np.linspace(0, 5, 6))
# 主目盛にグリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
指数関数
$y = e^{-x}, \ e^x$ のグラフ例。
x = np.linspace(-5, 5, 200)
plt.plot(x, np.exp(-x), linewidth = 2, label="$e^{-x}$")
plt.plot(x, np.exp(x), linewidth = 2, label="$e^x$")
# 横軸縦軸の表示範囲
plt.xlim(-5, 5)
plt.ylim(-0.1, 5)
# x の目盛を 1 刻みに。
plt.xticks(np.linspace(-5, 5, 11))
# y の目盛を 1 刻みに。
plt.yticks(np.linspace(0, 5, 6))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
三角関数
$ y = \sin x, \ \cos x, \ \tan x $ のグラフ例。
x = np.linspace(-2*np.pi, 2*np.pi, 200)
plt.plot(x, np.sin(x), linewidth = 2, label="$\sin x$")
plt.plot(x, np.cos(x), linewidth = 2, label="$\cos x$")
plt.plot(x, np.tan(x), linewidth = 2, label="$\tan x$")
# 横軸縦軸の表示範囲
plt.xlim(-2*np.pi, 2*np.pi)
plt.ylim(-3, 3)
# x の目盛
plt.xticks(
ticks = np.linspace(-2*np.pi, 2*np.pi, 9),
labels = ["-2.0π", "-1.5π", "-1.0π", "-0.5π","0",
"0.5π", "1.0π", "1.5π", "2.0π"])
# y の目盛
plt.yticks(np.linspace(-3, 3, 7))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
$y=\tan x$ のグラフも,$y \rightarrow -\infty$ と $y \rightarrow +\infty$ を縦の直線でつないでしまう。
逆三角関数
$y = \sin^{-1} x = \arcsin x =$ np.arcsin(x)
の定義域は $-1 \leq x \leq 1$
$y = \cos^{-1} x = \arccos x =$ np.arccos(x)
の定義域は $-1 \leq x \leq 1$
$y = \tan^{-1} x = \arctan x =$ np.arctan(x)
の定義域は $-\infty < x < \infty$
x = np.linspace(-1, 1, 200)
plt.plot(x, np.arcsin(x), linewidth = 2, label="arcsin x")
plt.plot(x, np.arccos(x), linewidth = 2, label="arccos x")
# 横軸縦軸の表示範囲
plt.xlim(-1, 1)
plt.ylim(-np.pi/2, np.pi)
# y の目盛
plt.yticks(
ticks = np.linspace(-np.pi/2, np.pi, 7),
labels = ["-0.50π", "-0.25π", "-0.00π", "-0.25π",
"0.50π", "0.75π", "1.00π"])
# x の目盛
plt.xticks(np.linspace(-1, 1, 5))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
x = np.linspace(-10, 10, 200)
plt.plot(x, np.arctan(x), linewidth = 2, label="arctan x")
# 横軸縦軸の表示範囲
plt.xlim(-10, 10)
plt.ylim(-np.pi/2, np.pi/2)
# y の目盛
plt.yticks(
ticks = np.linspace(-np.pi/2, np.pi/2, 5),
labels = ["-0.50π", "-0.25π", "-0.00π", "-0.25π",
"0.50π"])
# x の目盛
plt.xticks(np.linspace(-10, 10, 11))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
双曲線関数
$y = \sinh x, \ \cosh x, \ \tanh x$ のグラフ例。
x = np.linspace(-4, 4, 200)
plt.plot(x, np.sinh(x), linewidth = 2, label="sinh x")
plt.plot(x, np.cosh(x), linewidth = 2, label="cosh x")
# 横軸縦軸の表示範囲
plt.xlim(-4, 4)
plt.ylim(-30, 30)
# x の目盛
plt.xticks(np.linspace(-4, 4, 9))
# y の目盛
plt.yticks(np.linspace(-30, 30, 7))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
x = np.linspace(-5, 5, 200)
plt.plot(x, np.tanh(x), linewidth = 2, label="tanh x")
# 横軸縦軸の表示範囲
plt.xlim(-5, 5)
plt.ylim(-1, 1)
# x の目盛
plt.xticks(np.linspace(-5, 5, 11))
# y の目盛
plt.yticks(np.linspace(-1, 1, 11))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
逆双曲線関数
$ y = \sinh^{-1} x = \mbox{arsinh}\ x = $ np.arcsinh(x)
$ y = \cosh^{-1} x = \mbox{arcosh}\ x = $ np.arccosh(x)
$ y = \tanh^{-1} x = \mbox{artanh}\ x = $ np.arctanh(x)
x = np.linspace(-5, 5, 200)
plt.plot(x, np.arcsinh(x), linewidth = 2, label="$\sinh^{-1} x$")
# 横軸縦軸の表示範囲
plt.xlim(-5, 5)
plt.ylim(-3, 3)
# x の目盛
plt.xticks(np.linspace(-5, 5, 11))
# y の目盛
plt.yticks(np.linspace(-3, 3, 7))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
x = np.linspace(1, 5, 200)
plt.plot(x, np.arccosh(x), linewidth = 2, label="$\cosh^{-1} x$")
# 横軸縦軸の表示範囲
plt.xlim(1, 5)
plt.ylim(0, 3)
# x の目盛
plt.xticks(np.linspace(1, 5, 5))
# y の目盛
plt.yticks(np.linspace(0, 3, 4))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
# x = 1 は除く
x = np.linspace(0, 0.999, 200)
plt.plot(x, np.arctanh(x), linewidth = 2, label="tanh$^{-1} x$")
# 横軸縦軸の表示範囲
plt.xlim(0, 1)
plt.ylim(0, 3)
# x の目盛
plt.xticks(np.linspace(0, 1, 6))
# y の目盛
plt.yticks(np.linspace(0, 3, 4))
# グリッド(格子線)
plt.grid(which="major", color="lightgray", ls="--", linewidth=0.5)
# x軸 y軸
plt.axhline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.axvline(0, color='black', dashes=(5, 5), linewidth=0.5)
plt.legend();
SymPy 編
from sympy import *
# 1文字変数の Symbol の定義が省略できる
from sympy.abc import *
from sympy import I, pi, E
# 以下はグラフを SVG で Notebook にインライン表示させる設定
%config InlineBackend.figure_formats = ['svg']
べき関数
$y = x^{-2}, \ x^{-1}, \ x^2, \ x^3$ のグラフ例。
plot(x**(-2), x**(-1), x**2, x**3,
(x, -5, 5),
ylim = (-5, 5), legend = True);
$y$ 軸と重なっていて目立たないが,よくみると $y=x^{-1}$ のグラフの $x=0$ 付近,$y \rightarrow -\infty$ と $y \rightarrow +\infty$ を縦の直線でつないでしまってる。
seaborn でグリッドをつけて plot
SymPy の plot()
は既定ではグリッド等をつけるオプションがないようだ。以下のように,searborn を import してみる。
# グリッド(格子)をつける
import seaborn as sns
sns.set()
sns.set_style("whitegrid", {'grid.linestyle': '--'})
sns.set_context(rc={"grid.linewidth": 0.5})
$\displaystyle y = \sqrt{x}, \ \frac{1}{\sqrt{x}}$ のグラフ例。
plot(sqrt(x), 1/sqrt(x),
(x, 0, 5),
ylim = (0, 5), legend = True);
指数関数
$y = e^{-x}, \ e^x$ のグラフ例。
plot(exp(-x), exp(x),
(x, -5, 5),
ylim = (-0.1, 5), legend = True);
三角関数
$ y = \sin x, \ \cos x, \ \tan x $ のグラフ例。
plot(sin(x), cos(x), tan(x),
(x, -2*pi, 2*pi),
ylim = (-3, 3), legend = True);
$y=\tan x$ のグラフも,$y \rightarrow -\infty$ と $y \rightarrow +\infty$ を縦の直線でつないでしまう。
逆三角関数
$y = \sin^{-1} x = \arcsin x =$ asin(x)
の定義域は $-1 \leq x \leq 1$
$y = \cos^{-1} x = \arccos x =$ acos(x)
の定義域は $-1 \leq x \leq 1$
$y = \tan^{-1} x = \arctan x =$ atan(x)
の定義域は $-\infty < x < \infty$
plot(asin(x), acos(x),
(x, -1, 1),
ylim = (-pi/2, pi), legend = True);
plot(atan(x),
(x, -10, 10),
ylim = (-pi/2, pi/2), legend = True);
双曲線関数
$y = \sinh x, \ \cosh x, \ \tanh x$ のグラフ例。
plot(sinh(x), cosh(x),
(x, -4, 4),
ylim = (-30, 30), legend = True);
plot(tanh(x),
(x, -5, 5),
ylim = (-1, 1), legend = True);
逆双曲線関数
$ y = \sinh^{-1} x = \mbox{arsinh}\ x = $ asinh(x)
$= \log\left(x+\sqrt{x^2+1}\right)$
$ y = \cosh^{-1} x = \mbox{arcosh}\ x = $ acosh(x)
$= \log\left(x+\sqrt{x^2-1}\right)$
$ y = \tanh^{-1} x = \mbox{artanh}\ x = $ atanh(x)
$\displaystyle = \frac{1}{2} \log\left(\frac{1+x}{1-x}\right)$
plot(asinh(x),
(x, -5, 5),
ylim = (-3, 3), legend = True);
plot(acosh(x),
(x, 1, 5),
ylim = (0, 3), legend = True);
plot(atanh(x),
(x, 0, 0.99),
ylim = (0, 3), legend = True);