Return to 参考:初等関数のグラフを描く

参考:Python で初等関数のグラフを描く

matplotlib.pyplot.plot 編

Python の Matplotlib で初等関数のグラフを描く際は,NumPy の関数を使う。

例えば,$\sqrt{x} = $ np.sqrt(x),$\sin x = $ np.sin(x) 等々。

In [1]:
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$ のグラフ例。

In [2]:
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}}$ のグラフ例。

In [3]:
# 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$ のグラフ例。

In [4]:
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 $ のグラフ例。

In [5]:
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$

In [6]:
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();

In [7]:
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$ のグラフ例。

In [8]:
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();

In [9]:
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)

In [10]:
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();

In [11]:
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();

In [12]:
# 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 編

In [13]:
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$ のグラフ例。

In [14]:
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 してみる。

In [15]:
# グリッド(格子)をつける
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}}$ のグラフ例。

In [16]:
plot(sqrt(x), 1/sqrt(x), 
     (x, 0, 5), 
     ylim = (0, 5), legend = True);

指数関数

$y = e^{-x}, \ e^x$ のグラフ例。

In [17]:
plot(exp(-x), exp(x), 
     (x, -5, 5), 
     ylim = (-0.1, 5), legend = True);

三角関数

$ y = \sin x, \ \cos x, \ \tan x $ のグラフ例。

In [18]:
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$

In [19]:
plot(asin(x), acos(x), 
     (x, -1, 1), 
     ylim = (-pi/2, pi), legend = True);

In [20]:
plot(atan(x), 
     (x, -10, 10), 
     ylim = (-pi/2, pi/2), legend = True);

双曲線関数

$y = \sinh x, \ \cosh x, \ \tanh x$ のグラフ例。

In [21]:
plot(sinh(x), cosh(x), 
     (x, -4, 4), 
     ylim = (-30, 30), legend = True);

In [22]:
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)$

In [23]:
plot(asinh(x),
     (x, -5, 5), 
     ylim = (-3, 3), legend = True);

In [24]:
plot(acosh(x),
     (x, 1, 5), 
     ylim = (0, 3), legend = True);

In [25]:
plot(atanh(x),
     (x, 0, 0.99), 
     ylim = (0, 3), legend = True);