今回は「Numpy」、「Pandas」に続いて、勉強中のデータ分析に利用するためのツール「Matplotlib」の内容について、勉強したことを忘れないように備忘録として残しておきます。
以前の記事はこちらです。
もし、Matplotlibの設定であれどうやるんだっけ?って時の参考になればと思います。
可能な限り実行しながら実例を記載してます。
環境
- Windows10
- Python 3.8.1
- jupyter 1.0.0
- jupyter-client 6.1.7
- jupyter-console 6.2.0
- jupyter-core 4.7.0
- jupyterlab-pygments 0.1.2
- matplotlib 3.3.3
事前準備
Matplotlibを利用するときは初めに「matplotlib」モジュールをインポートしてください。
またMatplotlibはグラフを表示するためのライブラリなので、「Jupyter Notebook」を使ってプログラムを実行してください。
モジュール:import matplotlib.pyplot as plt
各種設定
実行した結果はすべてJupyter Notebookの出力結果を載せています。
グラフを書く
まずは何も表示しないグラフを書いてみます。
使い方
- plt.subplots()
x = [1, 2, 3] y = [2, 4, 9] fig, ax = plt.subplots() ax.plot(x, y) ax.set_title('Title') plt.show()
ここでは、x軸に「1,2,3」のデータをy軸に「2,4,9」のデータを入れて、棒グラフを表示します。
結果
こんな感じで棒グラフが書けます。
簡単にコードの説明だけしておくと、まずMatplotlibでグラフを書く場合には、描画オブジェクト(figure)を生成して、その中に1つ以上のサブプロット(subplot)を置きます。
「fig, ax = plt.subplots()」のコードでは、1つの描画オブジェクトを生成し、1つのサブプロットを配置しています。
簡単に説明すると、一つの枠の中に、1つのグラフを入れているというイメージです。
なので、先ほどの「plt.subplots()」の引数に2を入れる「plt.subplots(2)」と2つのサブプロットつまり、2つのグラフを入れることになります。
その他のコードも簡単に説明します。
- ax.plot(x, y):plotと指定することで棒グラフにしています
- ax.set_title(‘Title’):「Title」というタイトルをつけています
- plt.show():グラフを表示させています
タイトルをつける
グラフにタイトルをつけるには「suptitle」や「set_title」を使います。
使い方
描画オブジェクトにタイトルをつける
- 描画オブジェクト変数.suptitle(‘タイトル’)
サブプロットにタイトルをつける
- タイトルをつけるサブプロット変数.set_title(‘タイトル’)
x = [1, 2, 3] y = [2, 4, 9] fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット ax.plot(x, y) fig.suptitle('suptitle') ax.set_title('sub_plot_title') plt.show()
ここでは、描画オブジェクトに「suptitle」、サブプロットに「sub_plot」とします。
結果
タイトルがつきました。
もしサブプロットが複数個ある場合は次のようにしてタイトルを付けます。
- タイトルをつけるサブプロット変数[インデックス番号].set_title(‘タイトル’)
例)ax[0].set_title(‘sub_plot_title’)
軸にラベルをつける
軸にラベルをつけるには「set_xlabel」や「set_ylabel」を使います。
使い方
X軸にラベルをつける
- サブプロット変数.set_xlabel(‘X軸ラベル’)
Y軸にラベルをつける
- サブプロット変数.set_ylabel(‘Y軸ラベル’)
x = [1, 2, 3] y = [2, 4, 9] fig, ax = plt.subplots()#fig:描画オブジェクト、ax:サブプロット ax.plot(x, y) #折れ線グラフ ax.set_xlabel('x_Label') #X軸ラベル ax.set_ylabel('y_Label') #Y軸ラベル plt.show()
ここでは、X軸に「x_Label」、Y軸に「y_Label」とします。
結果
凡例を表示する
サブプロットに凡例を表示するには、データ描画時に「label」引数を使い、表示するときに「legend」メソッドを使います。
使い方
- サブプロット変数.plot(label =’凡例のラベル’)
サブプロット変数.legend(凡例の場所)
x = [1, 2, 3] y = [2, 4, 9] fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット ax.plot(x, y, label='legend_label') #折れ線グラフ ax.legend(loc='best') #凡例表示 plt.show()
ここでは、凡例に「legend_label」と指定して「loc=’best’」を使って凡例の場所は他のデータと重ならないように表示させています。
※ちなみに「best」はデフォルトなので指定しなくても一番いいとこに表示してくれます。
結果
その他の凡例の場所の指定方法は次のようなものがあります。
- upper left:左上
- upper right:右上
- lower left:左下
- lower right:右下
- center:真ん中
さらに詳しい内容を知りたい場合は以下のサイトを参照ください。
公式サイト:matplotlib.pyplot.legend
作成したグラフを出力する
作成したグラフを出力する場合は「savefig」メソッドを使います。
使い方
- 描画オブジェクト変数.savefig(‘出力ファイル名.拡張子’)
fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット fig.savefig('sample-figure.png')
ここでは、「sample-figure.png」ファイルを出力してます。
結果
実行したフォルダの直下に指定した名前の画像ファイルができています。
「png」以外にも、「pdf」や「svg」なども利用できます。
さらに詳しい内容を知りたい場合は以下のサイトを参照ください。
公式サイト:matplotlib.pyplot.savefig
色んなグラフを出力する
今までは折れ線グラフだけを使ってきましたが、他のグラフ種類も利用できます。
グラフ種類
- 折れ線グラフ
- 棒グラフ
- 散布図
- ヒストグラム
- 箱ひげ図(まだ未作成)
- 円グラフ
折れ線グラフ
まずは折れ線グラフから見ていきます。
使い方
- サブプロット変数.plot(X軸の値, Y軸の値)
x = [1, 2, 3] y1 = [2, 4, 9] y2 = [3, 4, 5] fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット ax.plot(x, y1) #折れ線グラフ ax.plot(x, y2) #折れ線グラフ plt.show()
ここでは、2種類のグラフを描画しています。
結果
棒グラフ
棒グラフを書くには「bar」メソッドを使います。
使い方
- サブプロット変数.bar(X軸の値, Y軸の値)
x = [1, 2, 3] y = [2, 4, 9] fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット labels = ['blog', 'youtube', 'twitter'] #ラベル ax.bar(x, y, tick_label=labels) #棒グラフ。ラベルを使う場合は「tick_label」を指定する。 plt.show()
ここでは、棒グラフを作成して「blog,youtube,twitter」というラベルを作成して描画します。
結果
散布図
散布図を描画するには「scatter」メソッドを使います。
使い方
- サブプロット変数.scatter(X軸の値, Y軸の値)
import numpy as np fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット x = np.random.rand(50) y = np.random.rand(50) ax.scatter(x, y) #散布図 plt.show()
ここでは、x,yにランダムな数字を50個作成して散布図を描画します。
結果
補足情報
散布図で表示されている「●」は「marker」引数を使って変更することができます。
使う場合は以下のようにします。
例)ax.scatter(x[0:10], y[0:10), maker=’^’) #散布図
他にもいろんなマーカーがあります。詳細は以下のサイトを参照ください。
- marker一覧(抜粋)
marker | 結果 |
. | ● |
v | ▼ |
^ | ▲ |
< | ◀ |
> | ▶ |
ヒストグラム
ヒストグラムを描画するには「hist」メソッドを使います。
使い方
- サブプロット変数.hist(配列データ)
import numpy as np fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット mu = 1500 #平均値 sigma = 200 #標準偏差 x = np.random.normal(mu, sigma, 2000) ax.hist(x) #ヒストグラム plt.show()
ここでは、numpyで正規分布に従う乱数を生成するnormal関数で数字を2000個作成して散布図を描画します。
結果
このようにヒストグラムを描画できました。
ちなみにビン(棒の数のこと)を指定することもできます。(デフォルトでは10個)
指定する場合は引数に「bins=40」とします。
例)ax.hist(x, bins=40)
こんな感じです。
他にもグラフを横向きにしたい場合は「orientation=’horizontal’」を指定したり、「color」を使うことで色を変えたりできます。
もっと詳しく知りたい方は公式サイトを参照ください。
円グラフ
円グラフを描画するには「pie」メソッドを使います。
使い方
- サブプロット変数.hist(配列データ)
x = [10, 200, 300] fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット labels = ['blog', 'youtube', 'twitter'] ax.pie(x, labels=labels) #円グラフ plt.show()
ここでは、x変数の円グラフをラベルを付けて描画します。
結果
こんな感じで円グラフになります。
ちなみに引数で「startangle=90」を指定すると頂点から描画を始めることができます。
ax.pie(x, labels=labels, startangle=90) #円グラフ
他にも色んな引数があります。
その他の引数(サンプル)
内容 | 引数 |
頂点から描画する | startangle=90 |
時計回りに描画する | counterclock=False |
グラフに影をつける | shadow=True |
%表記で割合をグラフに描画する(●●%) | autopct=’%1.2f%%’ |
2番目グラフの一部を切り離して描画する | explode=[0, 0.1, 0] |
以上がグラフの種類の説明でした。
気を付けないといけないのは、時計回りにする時は「counterclock=False」にすることです。
デフォルトはTrueで半時計周りなので間違えないようにしましょう。
その他共通で使える引数
今まで記載したものは基本だけなので、以下は、よく利用するその他に共通で使える引数です。
内容 | 引数 |
マーカーを変える | maker=’o’, maker=’1′ |
色を変える | color=’aqua’, color=’#0000FF’ |
線の種類を変更する | linestyle=’–‘, linestyle=’:’ |
線の幅を変更する | linewidth=2 |
ちなみに「マーカー、色変更、線の種類変更」の引数は一括で指定することも可能です。その場合は変数に次の順番に決められたフォーマットで指定します。
‘[marker][line][color]’
以下は、makerを「▼」、lineを「–」、colorを「緑色」の例です。
例)fmt = ‘1–g’
色んなパラメータがあるので、興味があれば公式サイトから確認してみてください。下記の「Other Parameters:」の「**kwargs」にパラメータの種類が載っています。
上記に記載したものを全部使ってみます。
x = [10, 200, 300] y = [2, 4, 6] fig, ax = plt.subplots() #fig:描画オブジェクト、ax:サブプロット fmt = '1--g' ax.plot(x, y, fmt, linewidth=2) plt.show()
結果
下矢印は小さくて見えずらいですが、ちゃんと指定した通りになりました。
Matplotlib公式サイト
本日はここまでとなります。
これからも追加していきますので、定期的に見に来ていただければと思います。
参考にしている本
[amazon asin=”4798158348″ kw=”Pythonによるあたらしいデータ分析の教科書”]
以上です。ありがとうございました。
コメント