関数のグラフを描く

Matplotlib: Visualization with Python https://matplotlib.org/

In [1]:
# 基本1
# %から始まるコマンドは、ノートブックのコマンドでマジックコマンドという。
# 以下のマジックコマンドはmatplotlibでの描画をnotebook内に出力せよという指示
%matplotlib inline

# グラフ描画ライブラリmatplotlibのpyplotモジュールをインポートして別名pltで参照
import matplotlib.pyplot as plt

# 数値計算ライブラリnumpyをインポートして別名npで参照
import numpy as np 

# x軸:角度,xは初項0.0, 公差1.0の等差数列で360.1未満からなる配列(numpy.ndarray)[0, 1, 2,・・・. 299, 360]
x = np.arange(0.0, 360.1, 1.0)  

# degree:角度(度数)をラジアンに変換する定数,np.pi:円周率
degree = np.pi/180.0

# numpyの関数は引数が配列の場合には、それぞれの配列要素に関数を適用した結果の値を要素とする配列が戻る
y = np.sin(x*degree) 

# plot -------
# fig:Figure描画画像全体, ax:Axes 一つのグラフ(複数のグラフでfigを構成することもできる。)
fig, ax = plt.subplots()  

ax.plot(x, y)  # xとyは配列
fig.set_size_inches(12, 5)  # figureのサイズ(width, height)をインチで指定、defaultは 6.4、4.8

plt.show() # 描画命令
In [2]:
# 基本2: データをプロット
%matplotlib inline
import matplotlib.pyplot as plt

x =  [100, 200, 300, 400, 500, 600]
y1 = [ 10,  20,  30,  50,  80, 130]
y2 = [ 10,  15,  30,  45,  60,  75]

fig, ax = plt.subplots()  
ax.plot(x, y1, marker="o", color = "red", linestyle = "--")
ax.plot(x, y2, marker="v", color = "blue", linestyle = ":");

plt.show() # 描画命令
In [3]:
# 基本3: グラフを整える
%matplotlib inline 
import matplotlib.pyplot as plt
import numpy as np

angles = np.arange(0.0, 360.1, 1.0)

degree = np.pi/180.0
sin = np.sin(angles*degree)

# plot -------
fig, ax = plt.subplots()

ax.plot(angles, sin, linewidth = 2.0)

# x軸,y軸の範囲,ticksマークの位置を指定
ax.set( xlim = (0, 360), xticks = np.arange(0, 361, 30),
        ylim = (-1, 1),  yticks = np.arange(-1, 1.1, 0.2))
# x軸を太線で引く: plot([x1, x2], [y1, y2])
ax.plot([0, 360], [0, 0], linewidth = 1.5, color = "black")
# グリッドを描画
ax.grid(True)
# 軸ラベル
ax.set_xlabel('angle(dgree)')
ax.set_ylabel('sin')
# グラフのタイトル
ax.set_title('sine curve', fontsize = 16)

plt.show()
In [4]:
# 基本4: 複数のグラフをまとめて表示
# sin, cos, tan
%matplotlib inline 
import matplotlib.pyplot as plt
import numpy as np

angles = np.arange(-360, 360.1, 1.0)

degree = np.pi/180.0
sin = np.sin(angles*degree)
cos = np.cos(angles*degree)
tan = np.tan(angles*degree)

# plot -------
fig, ax = plt.subplots()

# labelとcolorを指定
ax.plot(angles, sin, linewidth = 2.0, label="sin", color="red")
ax.plot(angles, cos, linewidth = 2.0, label="cos", color="green")
ax.plot(angles, tan, linewidth = 2.0, label="tan", color="orange")

ax.set( xlim = (-360, 360), xticks = np.arange(-360, 361, 60),
        ylim = (-3, 3), yticks = np.arange(-3, 3.1, 0.5))

ax.plot([-360, 360], [0, 0], linewidth = 1.5, color = "black")
ax.grid(True)
ax.set_xlabel('angle(dgree)')
ax.set_title('sin, cos, tan', fontsize = 16)
# 凡例 plotのlabelとcolorの指定の対応が表示される
ax.legend(loc = 'upper right')  

plt.show()
In [5]:
# titleにTexで数式を埋め込む $Texコード$
# 正規分布
%matplotlib inline 
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-4.0, 4.0, 0.1)
y = (1/(2*np.pi)**0.5) * np.exp(-x*x/2)

# plot -------
fig, ax = plt.subplots()

ax.plot(x, y)
ax.axis([-4, 4, 0, 0.5])
ax.grid(True)

ax.set_xlabel('x')
ax.set_ylabel('y')

#                                    $  tex コード  $
ax.set_title('normal disitiribution: $ y = \dfrac{1}{\sqrt{2 \pi}} \exp( - \dfrac{x^2}{2} ) $', fontsize = 16)

plt.show()
In [6]:
# グラフのタイトルやラベルに日本語フォントを使う。
%matplotlib inline
import matplotlib.pyplot as plt
# matplotlibを日本語化するライブラリをインストール,!で始まるコマンドはシステムコマンド
!pip install japanize-matplotlib
import japanize_matplotlib # japanize_matplotlibをインポート
import numpy as np  

angle = np.arange(0.0, 360.1, 1.0)
degree = np.pi/180.0
sin = np.sin(angle*degree)

# plot -------
fig, ax = plt.subplots()

ax.plot(angle, sin, linewidth = 3)  # 線の幅:3
ax.axis([0, 360, -1, 1])  # グラフ:x軸,y軸の範囲指定
ax.grid(True)  # グリッド描画

ax.set_xticks( np.arange(0, 361, 30) )  # 0から361まで増分30の等差数列の配列:360では360が含まれないことに注意
ax.set_xlabel('angle')  # x軸のラベル指定
ax.set_ylabel('sin')  # y軸のラベル指定
ax.set_title('sin関数のグラフ', fontsize = 18)  # グラフのタイトル指定:日本語フォントが使える

plt.show()
Requirement already satisfied: japanize-matplotlib in /usr/local/lib/python3.7/dist-packages (1.1.3)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from japanize-matplotlib) (3.2.2)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.3.2)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (2.8.2)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (0.11.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (3.0.7)
Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.21.5)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->japanize-matplotlib) (1.15.0)
In [7]:
# 減衰振動
%matplotlib inline
import matplotlib.pyplot as plt
!pip install japanize-matplotlib  # matplotlibの日本語化ライブラリをインストール
import japanize_matplotlib # japanize_matplotlibをインポート
import pandas as pd

gamma = 0.3
def f(t):  # 関数fを定義
    return np.exp(-gamma*t) * np.cos(2 * np.pi * t)  # 減衰振動
 
t = np.arange(0.0, 10.0, 0.01)

fig, ax = plt.subplots()
ax.plot(t, f(t), linewidth = 3)
ax.grid(True)
 
ax.set_xlabel('time', fontsize = 16)
ax.set_ylabel('f', fontsize = 16)
ax.set_title('減衰振動 $e^{- \gamma t} \cos(2 \pi t)$', fontsize = 18)
ax.set_xticks( np.arange(0, 10.1, 1.0) )
ax.set_yticks( np.arange(-1.0, 1.1, 0.5) )
ax.set_xlim(0.0, 10.0)
ax.set_ylim(-1.0, 1.0)
ax.tick_params(labelsize = 16)
# グラフにテキストを表示. 数値(gamma)は文字に変換して,他の文字列と連結
ax.text(4.0, 0.5, '減衰率 $\gamma$ = ' + str(gamma), fontsize = 16)
 
plt.show()
Requirement already satisfied: japanize-matplotlib in /usr/local/lib/python3.7/dist-packages (1.1.3)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from japanize-matplotlib) (3.2.2)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.3.2)
Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.21.5)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (0.11.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (3.0.7)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (2.8.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->japanize-matplotlib) (1.15.0)
In [8]:
# 原点で不連続な関数:sin(1/x)
%matplotlib inline
import matplotlib.pyplot as plt
!pip install japanize-matplotlib 
import japanize_matplotlib 
import numpy as np  

# plot:2つのグラフを横に配置 -------
fig, ax = plt.subplots(1, 2, squeeze=False)  # subplots(nrows, ncols) nrows×ncols

# 1つ目のグラフ
x1 = np.arange(-1.0, 1.0, 0.001)
y1 = np.sin(1/x1)
ax[0, 0].plot(x1, y1)
ax[0, 0].grid(True)  # グリッド描画

ax[0, 0].set_xlim(-1.0, 1.0)
ax[0, 0].set_ylim(-1.0, 1.0)
ax[0, 0].set_xlabel('x')  # x軸のラベル指定
ax[0, 0].set_ylabel('y')  # y軸のラベル指定
ax[0, 0].set_title('$\sin ( \dfrac{1}{x} )$のグラフ', fontsize = 12)

# 2つ目のグラフ
x2 = np.arange(-0.01, 0.01, 0.00001)
y2 = np.sin(1/x2)
ax[0, 1].plot(x2, y2)
ax[0, 1].grid(True)  # グリッド描画

ax[0, 1].set_xlim(-0.01, 0.01)
ax[0, 1].set_ylim(-1.0, 1.0)
ax[0, 1].set_xlabel('x')  # x軸のラベル指定
ax[0, 1].set_ylabel('y')  # y軸のラベル指定
ax[0, 1].set_title('$\sin ( \dfrac{1}{x} )$のグラフ:原点付近を拡大', fontsize = 12) 

fig.set_size_inches(18, 5)  # figureのサイズを指定:横に拡大
plt.show()
Requirement already satisfied: japanize-matplotlib in /usr/local/lib/python3.7/dist-packages (1.1.3)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from japanize-matplotlib) (3.2.2)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (0.11.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (3.0.7)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (2.8.2)
Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.21.5)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.3.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->japanize-matplotlib) (1.15.0)
In [9]:
# 原点で連続な関数: x sin(1/x)
%matplotlib inline
import matplotlib.pyplot as plt
!pip install japanize-matplotlib 
import japanize_matplotlib 
import numpy as np  

# plot:2つのグラフを横に配置 -------
fig, ax = plt.subplots(1, 2, squeeze=False)  # subplots(nrows, ncols) nrows×ncols

# 1つ目のグラフ
x1 = np.arange(-1.0, 1.0, 0.001)
y1 = x1*np.sin(1/x1)  # numpy.ndarray同士の掛け算は,それぞれの要素同士の掛け算の配列になる。
ax[0, 0].plot(x1, y1)
# 拡大する領域を長方形で囲む
ax[0,0].plot( [-0.25,  0.25], [-0.25, -0.25], linewidth = 1.5, color = "black" ) 
ax[0,0].plot( [-0.25,  0.25], [ 0.25,  0.25], linewidth = 1.5, color = "black") 
ax[0,0].plot( [-0.25, -0.25], [-0.25,  0.25], linewidth = 1.5, color = "black") 
ax[0,0].plot( [ 0.25,  0.25], [-0.25,  0.25], linewidth = 1.5, color = "black") 
ax[0, 0].grid(True)  # グリッド描画

ax[0, 0].set_xlim(-1.0, 1.0)
ax[0, 0].set_ylim(-1.0, 1.0)
ax[0, 0].set_xlabel('x')  # x軸のラベル指定
ax[0, 0].set_ylabel('y')  # y軸のラベル指定
ax[0, 0].set_title('$x \sin(\dfrac{1}{x})$ のグラフ', fontsize = 12)

# 2つ目のグラフ
x2 = np.arange(-0.25, 0.25, 0.0001)
y2 = x2*np.sin(1/x2)
ax[0, 1].plot(x2, y2)
ax[0, 1].grid(True)  # グリッド描画

ax[0, 1].set_xlim(-0.25, 0.25)
ax[0, 1].set_ylim(-0.25, 0.25)
ax[0, 1].set_xlabel('x')  # x軸のラベル指定
ax[0, 1].set_ylabel('y')  # y軸のラベル指定
ax[0, 1].set_title('$x \sin ( \dfrac{1}{x} )$ のグラフ:原点付近を拡大', fontsize = 12) 

fig.set_size_inches(18, 5)  # figureのサイズを指定:横に拡大
plt.show()
Requirement already satisfied: japanize-matplotlib in /usr/local/lib/python3.7/dist-packages (1.1.3)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from japanize-matplotlib) (3.2.2)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.3.2)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (3.0.7)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (2.8.2)
Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.21.5)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (0.11.0)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->japanize-matplotlib) (1.15.0)