PythonのMatplotlibの使い方

Matplotlibの使い方

PythonのMatplotlibは、機械学習やディープラーニングをする上で欠かせないグラフ描画ライブラリの代表格です。

ただ、Matplotlibは複雑なので、細かく理解しようとするとかなりの時間がかかります。そのため、これでこういうことができるんだ~というレベルの理解で十分で、基本はコピペで問題ないかと思います。

Matplotlibのライブラリの基本的な使い方についてご紹介しますので、ぜひ参考にして使ってみて下さい。

この記事の他に、NumpyやPandasについてもまとめていますので、よろしければご確認下さい。

目次

Matplotlibとは

Matplotlibについて、公式では以下のように説明がされています。

Matplotlib は、Python で静的、アニメーション、インタラクティブな視覚化を作成するための包括的なライブラリです。Matplotlib は、簡単なことを簡単に、難しいことを可能にします。

・出版物のような品質のプロットを作成する。
・ズーム、パン、アップデートが可能なインタラクティブな図を作成する。
・ビジュアルスタイルとレイアウトをカスタマイズする
・多くのファイルフォーマットに書き出す
・JupyterLabやグラフィカルユーザインタフェースに埋め込む
・Matplotlibをベースにした豊富なサードパーティパッケージを利用する。

https://matplotlib.org/

翻訳しているので少し変な日本語ですが、Matplotlibを使うと簡単に可視化できまっせ~てことが書いてますね。

ちなみにライブラリとは、プログラミングで使える機能が詰まった「部品箱」のようなものです。わざわざ、必要な機能を自分でプログラムするのは大変ですが、既に用意されたライブラリを使うことで、必要な機能を簡単に使うことができます。

Matplotlibを使う準備

それではMatplotlibを使うために、Matplotlibのインストールとインポートについてご紹介します。

Matplotlibのインストール

pip install matplotlib

Matplotlibのインポート

%matplotlib inline
import matplotlib.pyplot as plt

%matplotlib inlineて何のために必要なの?
と思われる方も多いと思いますが、以下のような意味があります。

  • グラフがアウトプット行に出力される
  • plt.show()を省略してもグラフが出力される
  • plt.show()で2つ以上のグラフを表示することができる

グラフを見やすくするために必要なんだな~ぐらいに思っておけばで大丈夫です。

Matplotlibの日本語化

pip install japanize_matplotlib
import japanize_matplotlib

Matplotlibは日本語を使うと文字化けしてしまうため、日本語化したい場合は上記を実施して下さい。日本語化するやり方は幾つかありますが、これが一番簡単です。

データの準備

グラフを表示するデータを準備します。ここではグラフで表示するための適当なデータを用意しています。基本的にはこのデータを使って可視化していきます。

x = np.arange(-10, 10, 0.1) #-10から10まで0.1区切りで配列を作る
y = np.sin(x) #配列xの値に対してそれぞれsin(x)をnumpyより求めてy軸の配列を生成

Matplotlibのグラフ操作

グラフの表示

plt.plot(x,y) # plot関数の第一引数はx軸、第二引数はy軸
plt.show()

plt.plot()は、デフォルトで折れ線グラフを作成します。

plt.plot()の引数を指定することでグラフの色や形を変えることができます。

plt.plot(x,y,color="red", marker="*", markersize=8)  # colorで色指定、markerの"*"で★印のマーカー追加、markersizeでマーカーの大きさ指定
plt.show()

グラフタイトル表示

plt.title()でグラフにタイトルを記載することができます。

plt.title("sine graph", size = 30, color = "Blue")
plt.plot(x, y)
plt.show()

X軸、Y軸の範囲、ラベルを設定

plt.xlabel()plt.ylabel()で、ラベルを追加することができます。

plt.xlim() plt.ylim()でx軸、y軸の範囲を設定することができます。

plt.plot(x, y)
plt.xlabel("X-value")  # x軸ラベルの設定
plt.ylabel("Y-value")  # y軸ラベルの設定
plt.xlim(0,10)  # x軸の範囲(最小、最大)を設定
plt.ylim(-1.5, 1.5)  # y軸の範囲(最小、最大)を設定
plt.grid()  # グリッド線を追加
plt.show()

凡例の追加

グラフに凡例を追加させるには、以下を実行します。

  • プロット時にラベル名を指定する:plt.plot(x, y, label='label_name')
  • 凡例を表示する:plt.legend()
plt.plot(x, y, label="sin(x)")
plt.legend()
plt.show()

凡例の位置を変更したい場合

凡例の位置を変更したい場合は、plt.legend() の引数を指定することで可能です。

plt.plot(x, y, label="sine")
plt.legend(loc='upper right') #upper leftだと左上、lower rightだと右下
plt.show()

凡例をグラフの外に出したい場合は次の通りです。

plt.plot(x, y, label="sine")
plt.legend(loc='upper left', bbox_to_anchor=(1, 1)) #bbox_to_anchor=(1, 0)だと右下に表示されます
plt.show()

グラフの大きさ変更

ply.figure()でグラフの大きさを指定することができます。

plt.figure(figsize=(16,4))
plt.plot(x,y) 
plt.show()

複数のグラフの表示

plt.plot()を繰り返して実行すると、1つのグラフの中に複数の曲線を追加することができます。

x = np.arange(-10, 10, 0.1) #-10から10まで0.1区切りで配列を作る
y1 = np.sin(x)
y2 = np.cos(x)
 
plt.plot(x, y1, label="sin")
plt.plot(x, y2, label="cos")
 
plt.legend()
plt.show()

複数のグラフを出力する場合は、plt.subplot()を使います。

# 1つ目のグラフ 
plt.subplot(321) 
plt.plot(x, y1) 
 
# 2つ目のグラフ 
plt.subplot(322) 
plt.plot(x, y1, 'r--')

# 3つ目のグラフ 
plt.subplot(323) 
plt.plot(x, y1, 'b--')

# 4つ目のグラフ 
plt.subplot(324) 
plt.plot(x, y2, 'g--')

# 5つ目のグラフ 
plt.subplot(325) 
plt.plot(x, y2, 'r*-')

plt.show()

plt.subplot()のグラフの場所を指定する引数は次のイメージの通りです。 

Matplotlibの様々な種類のグラフ出力

棒グラフ

x = [2, 4, 6, 8]
height = [20, 40, 60, 80]
labels = ["Product A", "Product B", "Product C", "Product D"]
 
plt.bar(x, height=height, tick_label=labels)
plt.show())

ヒストグラム

x = np.random.randn(10000)
plt.hist(x, bins="auto", alpha=0.6, edgecolor="black")
 
plt.show()

散布図

x = np.random.randn(50)
y = np.random.randn(50)
colors = np.random.rand(50)
 
plt.scatter(x, y, c=colors, cmap="winter")
plt.show()

円グラフ

x = [2, 4, 6, 8]
labels = ["Product A", "Product B", "Product C", "Product D"]
 
plt.pie(x, labels=labels, startangle=90, counterclock=False)
plt.show()

FigureとAxesによるグラフ表示

FigureとAxesを使うことでより高度なグラフ表示が可能となります。FigureとAxesの関係性は次の通りです。

  • Figure:グラフ描画全体領域
  • Axes:グラフの1つ1つを描く領域

plt.subplots()を使ってFigureAxesオブジェクトを同時に生成します。

その後にAxesオブジェクトより表示させたいグラフの位置をそれぞれ指定して描画していきます。

fig, axes = plt.subplots(2, 2, tight_layout=True, sharex=True, sharey=True)
 
x = np.linspace(-5,5)
y = x**3
 
axes[0,0].plot(x, y)
axes[0,1].plot(x, 2*y)
axes[1,0].plot(x, 3*y)
axes[1,1].plot(x, 4*y)
 
plt.show()

plt.subplots()の引数でsharexshareyをTrueとすることで、グラフ間のx軸、y軸を固定して出力することができます。これによって、各グラフの比較ができるようになります。

FigureとAxesでは、このような細かい設定が可能となります。

pythonのおすすめ勉強法

そもそもpythonの知識を1から学びたいという人にマジでおすすめなpythonの勉強方法をご紹介します。

結論から言うと、Udemyを活用することです。私はPythonを以下の講座のみで学びましが、本当に分かりやすく最強だと思っています。実際に講座を見ながら自分も手を動かして学習できるので、しっかりと身に付きます。

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル icon

まとめ

いかがでしたでしょうか。

Matplotlibはかなり奥が深いです。データ分析では欠かせないツールの1つなので、ぜひMatplotlibを使いこなし、データ分析の効率化や可視化の改善に役立ててください。

コメント

コメントする

目次