Translate

【超初心者向け】pythonで簡単なグラフを作る方法【matplotlib】

皆さんはグラフを作るといったらどういったツールを使うことが多いでしょうか?多くの場合はExcelとかを第一に据える人がほとんどだと思いますが、エクセルってラフにグラフを作るのはいいのですが、細かい調整だったりとかデザインの部分でイマイチ使いにくかったり納得いくデザインに仕上がらないといったこともありますよね。

Excelで作ったグラフをPowerPointに拡張メタファイル形式で持っていて加工する方法は前に説明したのですが、あれも簡易的にマニュアルでずらす方法であってきわめて楽という手段ともいえません。

でも実はpythonデータを読み取ってしまえばExcel以上のきれいなグラフが簡単に作ることができるというのがpythonをいじっている中で分かってきました。


今回はシリーズ物としてpythonを使ったグラフの描き方についていろいろと紹介していこうと思います。第一回目は折れ線グラフにします。

pythonでグラフを書く時にはmatplotlibのモジュールを使う



pythonでグラフを書く時に使うのが、matplotlibのモジュールです。このモジュールはAnacondaからpythonをインストールした場合には、デフォルトで入っているモジュールですので、Anaconda Promptからわざわざインストールしなくても問題ありません。


このmatplotlibはかなり便利で、折れ線グラフから、散布図、棒グラフ、三次元のプロットなどいろんなグラフを簡単に描くことができます。しかも色のグラデーションだったりとかも豊富ですし、複数のグラフを同時に描くこともできます。発色もきれいだし解像度も結構いいので、pythonでもMATLABと引けを取らないくらいきれいなグラフを描くことができます。

matplotlibで折れ線グラフはplot()を使う

matplotlibで最も基本になるのが折れ線グラフの描写です。これはplot()の関数で描くことができます。

簡単なコードで書くとこんな感じです。


import numpy as np 
import matplotlib.pyplot as plt

a = np.array ([1,2,3,4,5])
plt.plot(a)


aの変数の部分はあくまでも例なので、ここの部分を手持ちのデータにすると各々データでのグラフになります。
そうするとこんな感じのグラフができます。

これをベースにいろいろといじっていきましょう。

例えば違うデータを同じグラフの中に重ね書きしたいといった場合にはこんな感じになります。


import numpy as np 
import matplotlib.pyplot as plt

a = np.array ([1,2,3,4,5])
b = np.array([6,7,8,9,10])
plt.plot(a)
plt.plot(b)

同じ図表の中に複数のデータを入れ込みたい時には、連続でplot()を書いてあげればよいです。

では次にこれらの二つのデータを分けてグラフ表示したい場合にはどうしたらよいかというと、こんな感じでpythonコードを書きます。


import numpy as np 
import matplotlib.pyplot as plt

a = np.array ([1,2,3,4,5])
b = np.array([6,7,8,9,10])
plt.figure()
plt.plot(a)
plt.figure()
plt.plot(b)

このようにpythonコードを書いてあげると二つのグラフが別々のウィンドウで描画されます。データサイズの異なるグラフを分けて作りたいときはこういった書き方をするのが良いでしょう。どうしてこうすることによって二つのグラフに分けて書けるのかというと、plt.figure()という関数がキモになります。

plt.figure()はいわば空のグラフを作るという関数だといえ、その空の関数の中のplt.plot()で描写をしていくという感じです。二回目のplt.figure()で二つ目の空のグラフがまた初期化されて出てくるので結果的に二つのグラフが出現するというわけです。


matplotlibのでのグラフ描写【やや応用編: add_subplot()】

pythonでのグラフ描写では上記のグラフよりもさらに複雑なグラフを作ることができます。例えば、一つのウィンドウに二つの別々のグラフを入れ込むことが可能です。これは一度に複数のグラフを一枚のウィンドウに表示できることからいろんなデータを集約したレポート作成に使うのに非常に便利です。

pythonでそういったレポート表示のためのグラフ描写をするためには、上記のようなグラフ描写と比べて少し複雑なコード(とはいってもそんなに行数はかからず、簡単なpythonコード)を書く必要があります。ただテンプレートのpythonコードさえマスターしてしまえばあとはコピペとちょっとした書き換えだけなのでそんなに身構えなくても大丈夫です。


具体的なpythonコードの例はこちらになります。

import numpy as np 
import matplotlib.pyplot as plt

a = np.array ([1,2,3,4,5])
b = np.array([6,7,8,9,10])
fig  = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)

ax1.plot(a)
ax2.plot(b)


描写されるグラフはこんな感じで、一つのウィンドウに二つのグラフが描写されました。一つ一つのpythonコードの説明に移ります。まず一つ目のfig = plt.figure()では、figという名前で空のグラフの入れ物を作りますといったニュアンスになります。


次にax1 = fig.add_subplot(2,1,1)の部分ですが、これはfigの中にさらにax1という場所を作ってそれは、figを二行一列に分割してその一行目をax1に割り当てるといったニュアンスのpythonコードになります。次のコードも意味合いは全く一緒で二行目を ax2と割り当ているといった感じです。


そしてそれぞれに割り当てられた場所に実際にグラフ描写を行うplot()関数のpythonコードを書きこみます。


このax1,ax2みたいな書き方は今後タイトルを入れたり、凡例を入れたり、数字の値の範囲を決めたりする際に非常に重要になる書き方なので必ず使えるようになりましょう(他のサイトとかでもax.見たいな書き方が多いのでこのpythonコードの描き方に慣れていると応用がききやすいです)。

ちなみに、一行一列のでax.みたいな書き方をする場合にはこんな感じになります。

import numpy as np 
import matplotlib.pyplot as plt

a = np.array ([1,2,3,4,5])
b = np.array([6,7,8,9,10])
fig  = plt.figure()
ax = fig.add_subplot(1,1,1)

ax.plot(a)



matplotlibはこれが基本

今回はpythonできれいにグラフを書くために必要になる大前提のグラフの領域の割り当てだったりとかの部分についてかなり端折って解説しました。これができるようになると色を変えたり、範囲を変えたり、サイズをいじったり、グリッド線を入れたりとかいろいろなカスタムができるようになるので、実用的にpython使えているなー実感できるようになると思います。

これからもまたいろいろと、pythonを使った散布図だったり、細かいグラフの設定だったり、回帰曲線を書いたりとかいろいろな記事をどんどん追加していこうと思うのでよろしくお願いいたします。