1.6. データの可視化

 データの可視化に便利なmoduleはたくさん存在するが、入門者向けにはmatplotlibが簡単で覚えやすいだろう。まずmoduleを読み込んで簡単なプロットをしてみる。

In [1]:
import matplotlib.pyplot as plt
import numpy as np
plt.plot(np.arange(0, 10))
Out[1]:
[<matplotlib.lines.Line2D at 0x1d9938276c8>]

 ただし、一回目に実行したときや、Kernelをrestartした場合は、図が表示されない。これが気持ち悪い場合は、次の%で始まるmagic commandを追加する。

In [2]:
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(np.arange(0, 10))
Out[2]:
[<matplotlib.lines.Line2D at 0x1d9938e2488>]

 2回め以降に実行したときには、このcommandを書かなくても表示されるので、今後のコードではこのMagic commandは省略することにする。


実行したとき、セル番号のあとに、[<matplotlib.lines.Line2D at 0x172a4a79400>]のようなよく分からない出力を出さないようにするには、作図の行の最後に;を追加するとよい。

In [3]:
plt.plot(np.arange(0, 10));

それでは例題を使って、plt.plotをいろいろ試してみよう。

(例題) $y=\sin 2 \pi x$ を $0 \le x \le 5$で図示せよ。

In [4]:
import numpy as np
x = np.arange(0, 5, 0.05) #刻みは適当に0.05とした
y = np.sin(2*np.pi*x) 
plt.plot(x,y);

 こんな図が表示される。np.sinのargument(引数)はスカラーだけでなく、上の例のように一次元配列や今後勉強する二次元配列、行列を入れることもできる。

 軸にラベルやタイトルをつけたいときは、plt.xlabelなどが使える。ラベル内ではTeXのコマンドも使える。範囲を指定したいときは、plt.xlim([最小値, 最大値])などと書く。

In [5]:
plt.plot(x,y)
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.title('sin wave')
plt.xlim([0, 2])
plt.ylim([-1.5, 1.5]);

plotの色を変えたいときや、ラインではなく点でプロットしたいときなど、いろいろオプションがあるので、必要に応じてMatplotlibの公式(https://matplotlib.org/) を参考にするとよい。

In [6]:
plt.plot(x,y, 'r')
plt.xlabel('x')
plt.ylabel('y')
plt.title('test')
plt.xlim([0, 2])
plt.ylim([-1.5, 1.5]);

 C/C++やJavaのような言語は、データを図示するのに他のグラフアプリを使う必要があり、数値計算の結果をすぐに解析するときに非常に面倒であるが、pythonではこのmatplotlibが使えるために、シームレスに図示することができる。さらにJupyter Notebookでは、図を張り付けたり、Markdownを使ってリンクを張ったり、数式もTeXのように書くことができるので、python + Jupyter Notebookの組み合わせは、まさに研究ノートを書いていく要領でまとめられるので、データをさまざまな角度から解析、分析してまとめる必要のあるデータサイエンティストたちに支持されている。


練習問題

(1.6.1.) 中心を$(x_0,y_0)=(1,2)$とし、半径$r=3$の円をグラフで表示せよ。


(1.6.2.) 以下のような関数をsinc関数という。

\begin{equation} \mathrm{sinc} (x) = \frac{\sin \pi x}{\pi x} \end{equation}

 $-20 \leq x \leq +20$の範囲で、$\mathrm{sinc}(x)$を図示せよ。

 

解答例

(1.6.1.) $0 \leq \theta \leq 2\pi$となるthetaを定義して、thetaをパラメータとした配列xyを計算して図示する。

In [7]:
import numpy as np
import matplotlib.pyplot as plt
x0, y0, r = 1, 2, 3
theta = np.arange(0, 2*np.pi, 0.01)
x = r * np.cos(theta) + x0
y = r * np.sin(theta) + y0
plt.figure(figsize=(5,5))
plt.plot(x,y)
plt.axis([-5, 5, -5, 5])
plt.xlabel('x')
plt.ylabel('y');


(1.6.2.) この$\mathrm{sinc}$関数は物理、数学、情報処理など多方面で頻出の関数なので記憶にとどめておくことをお勧めする。プロット自体は特に難しいこともないだろう。

In [8]:
x = np.arange(-20, 20.1, 0.1)
y = np.sin(np.pi * x)/(np.pi * x)
y = np.sinc(x)
plt.plot(x,y);

 NumPyには$\mathrm{sinc}$関数も用意されているので、そのままy = np.sinc(x)としても同じ結果となる。なおNumPyの$\mathrm{sinc}$関数は正規化$\mathrm{sinc}$関数なので、np.sincの中にnp.piを書く必要はない。


当サイトのテキスト・画像の無断転載・複製を固く禁じます。
Unauthorized copying and replication of the contents of this site, text and images are strictly prohibited.
© 2019 Go Yusa