Matplotlibの使い方①(plt.plot、plt.scatter、plt.hist)|Pythonによる可視化入門 #1

f:id:lib-arts:20190611223958p:plain

Pythonを使うにあたって使いこなせると便利なのがMatplotlibをはじめとする可視化用のライブラリです。とはいえ、ドキュメントを読むとなると必要な機能をピンポイントで探すのが大変なので、入門者向けに軽い導入はあると良さそうです。
当シリーズではそれを受けてPythonを用いたデータの可視化についてよく使う機能を中心にまとめていきます。
#1ではまず基本的なライブラリであるMatplotlibの概要や使いこなすにあたって、よく使う機能を中心にまとめたいと思います。
以下目次になります。
1. Matplotlibの概要、インストール
2. matplotlib.pyplotのよく使う基本的な可視化機能(plt.plot、plt.scatter、plt.hist)
3. まとめ


1. Matplotlibの概要、インストール
1節ではまずMatplotlibの概要の説明とインストールについて解説できればと思います。

f:id:lib-arts:20190611225948p:plain

Matplotlib: Python plotting — Matplotlib 3.1.0 documentation
上記がMatplotlibのドキュメントになるのでこちらの簡単な和訳(細かいところは省きます)に簡単な補足を行うことで概要の解説を行います。

Matplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. Matplotlib can be used in Python scripts, the Python and IPython shells, the Jupyter notebook, web application servers, and four graphical user interface toolkits.

和訳:『MatplotlibはPythonの2次元(2D)の描画用のライブラリで、プラットフォームを跨いだ様々な環境で公開できるレベルのクオリティの図を生み出すことができる。MatplotlibはPythonスクリプトPythonシェル、Jupyter、Webサーバーで使うことができる。』

Matplotlib tries to make easy things easy and hard things possible. You can generate plots, histograms, power spectra, bar charts, errorcharts, scatterplots, etc., with just a few lines of code. For examples, see the sample plots and thumbnail gallery.
For simple plotting the pyplot module provides a MATLAB-like interface, particularly when combined with IPython. For the power user, you have full control of line styles, font properties, axes properties, etc, via an object oriented interface or via a set of functions familiar to MATLAB users.

和訳:『Matplotlibは簡単なことを簡単にし、難しいことも可能にすることを試みている。たった数行のコードを書くことで、点やヒストグラムパワースペクトル、棒グラフ、エラーチャート、散布図などを描くことができる。簡単な描画に当たって、pyplotモジュールがMATLABライクなインタフェースを提供する。ヘビーユーザーにとっては、線のスタイルやフォントの属性、軸の属性をオブジェクト指向のインターフェースまたはMATLABのユーザにとって馴染みの関数群を介して自由度高くカスタマイズすることが可能である。』
上記が簡単な和訳です(多少意訳が含まれています)が話をざっくりとまとめると、とにかく2次元描画用のライブラリで、PythonスクリプトやJupyter、Webサーバーなど様々なPythonコードから呼び出せるというのがあると思います。また、カスタマイズ性にも優れ、様々な設定を追加することができるようです。

大体の概要については上記でわかったので、インストールに関しても触れておきます。Anacondaの場合はプリインで入っていますが、通常のPython環境だと入っていないため、PyPIからインストールすることで使用できるようになります。インストールに関しては、ターミナル上で

$ pip install matplotlib

を実行することで、インストールを行うことができます。

 

2. matplotlib.pyplotのよく使う基本的な可視化機能(plt.plot、plt.scatter、plt.hist)
1節では概要の解説とインストールについて取り扱いましたので、2節ではよく使う基本的な可視化機能であるpyplot.plot、pyplot.scatter、plplot.histについて取り扱っていきます。
まず折れ線グラフ(点が多い際は実質曲線)を描くpyplot.plotについてです。細かい仕様の確認から入ると大変なのでまずは実際に下記のコードを動かしてみましょう。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-5,6,1)
y = x**2

plt.plot(x,y)
plt.show() 

上記を実行すると結果は下記のようになります。二次関数が描画できています

f:id:lib-arts:20190611232941p:plain
実行結果を確認した感じだと、少々線が角ばっている印象なので、もう少し曲線で描いてみましょう。描くにあたっては点の間隔を狭くすることで実現できます。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-5,5.1,0.1)
y = x**2

plt.plot(x,y)
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190611233017p:plain
描画する点の幅を1から0.1にすることで、滑らかな曲線で描画できていることがわかります。

 

次に散布図を描くための機能であるpyplot.scatterについてです。こちらも細かい仕様の確認から入ると大変なので、まずは下記のコードを動かしてみましょう。

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)

plt.scatter(x,y)
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190611233751p:plain
xとyを無相関に生成してプロットしたので、無相関のデータが得られています。散布図はこのようにデータの概形を直感的に掴むのに非常に便利です。相関のあるデータについても見ておければということで、下記も実行してみましょう。

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = x + np.random.rand(100)*0.1

plt.scatter(x,y)
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190611233833p:plain
相関があるように恣意的にデータを作成しているので、データ間に関係が生じていることが見て取れます。

 

最後にヒストグラムを記述するのに用いるpyplot.histについて取り扱います。こちらも細かい仕様の確認から入ると大変なので、まずは下記のコードを動かしてみましょう。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
x = np.random.rand(100)

plt.hist(x)
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190611234623p:plain
np.random.randは一様分布にしたがってデータの生成を行っていますが、サンプル数100だと少々偏りがあるので100,000に変更してみます。下記を実行することで、サンプル数を100,000にして実行を行うことができます。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
x = np.random.rand(100000)

plt.hist(x)
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190611234651p:plain
100,000サンプルとなると概ね一様になっていることがわかります。区間が少々広そうなので、binsオプションを用いて10区間を50区間に変更して見ます。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
x = np.random.rand(100000)

plt.hist(x, bins=50)
plt.show()

実行結果は下記のようになります。

f:id:lib-arts:20190611234720p:plain
このようにbinsで区間の数を指定することで、ヒストグラムをカスタマイズすることが可能です。


3. まとめ
#1では基本的な機能としてよく用いるpyplot.plot、pyplot.scatter、plplot.histについて取り扱いました。
#2以降ではその他のグラフとしてよく用いそうなグラフの描画について引き続きご紹介していければと思います。