Translate

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

前回のpythonとmatplotlibを使った折れ線グラフの描き方では、グラフのサブプロットの描き方などの基礎的なところから説明しました。今回の記事はmatplotlibでグラフを描く方法の続きになり、python環境での散布図のグラフ描写について紹介していこうと思います。


matplotlibモジュールを使ってpythonで散布図を描く




pythonで散布図を描写する際にも、グラフ描写用のモジュールであるmatplotlibを使用します。また散布図にするデータの形式は行列データの方が扱いやすいので、pythonの行列計算用のモジュールのnumpyを合わせてインポートしておきましょう。

それでは、前回の記事でもあったように最初にグラフを格納するためのfigureの領域を作成しましょう。

import numpy as np 
import matplotlib.pyplot as plt
#今回つかうモジュールのインポート
#anacondaからpythonインストールしている場合はもともとデフォルトでは入っている
#のでインポートだけでオーケー
a = np.array ([2,4,6,8,10])
b = np.array([1,3,5,7,9])
#散布図を描くためのデータ(ここは任意のデータでオーケー)
fig  = plt.figure()
ax = fig.add_subplot(1,1,1)
#matplotlibの描写したグラフを格納するための場所の設定

ax.scatter(a,b)





pythonでラフに散布図を描くためのコードとしてしてはこんな感じです。前回のmatplotlibの折れ線グラフの時のコードとあまり変わりはありません。ax.plotがax.scatterになったくらいです。ax.plotと違う点としては、必ず引数(ax.scatter()のカッコ内に入れる変数)が二つ必要で、かつ二つの引数の行数が一致しているというのが必須です。

二つの行数が一致していない場合には「x and y must be the same size」じのエラーコードが図れます。日本語で言うとxとyのデータのサイズが違います、って感じのニュアンスです。

matplotlibで縦横の幅を同じにしたい時には。。。

散布図を使ってデータを示したい時には、やはりx軸にしたデータとy軸にしたデータのの相関関係だったり回帰曲線を見たいケースが多いです。

そういった場合にはやはり、散布図のグラフの縦横の比は一致させておくとデータが見やすくなるのは自明です。

pythonのmatplotlibモジュールで縦横の比を維持する方法はいくつかあります。


aspect = 'equal'を使う

一番手っ取り速い方法としては、ax = fig.add_subplot()のカッコ内に、aspect ='equal'と付け加える方法があります。書き加えたときに該当箇所のコードは、

ax = fig.add_subplot(1,1,1,aspect='equal')

こんな感じになります。これで散布図のグラフを描画してみるとこんな感じになります。


先ほどのグラフと比べると、散布図のグラフの縦と横の比が一致して、正方形になっているのがわかります。この方法は直感的でわかりやすいのですが、そのまま使うと縦と横の間の余白が大きくなってしまうのがネックですね。

plt.figure()のカッコ内にfigsize = (○,○)と付け加える

aspect ='equal'を使った縦横をそろえる方法の他には、plt.figure()のカッコ内の設定を付け加える方法が挙げられます。

該当箇所のpythonコードを書き替えるとこんな感じです。

fig  = plt.figure(figsize = (5,5))


この方法のいい所は、散布図の大きさを任意で変えることができる点です。大きい散布図にしたい場合には、カッコ内の数字を大きくしてあげればよいのです。個人的にはこっちの方法の方が小回りは効くし、散布図グラフの余白も少なく作ることができるのでこっちがおすすめですね。このあたりは好みにもよると思いますが。。。


散布図の点の大きさを変える場合にはs = ○○を付け加える

データの数だったり見やすさの観点から、散布図グラフの点の大きさを変えたくなる場合もあると思います。matplotlibの場合には、ax.scatter()のカッコの中にs = ○○と加えてやると散布図の点の大きさを変えることができます。

具体的にpythonコードを書くとこんな感じになります。

ax.scatter(a,b,s = 100)

こんな感じで散布図グラフ内の一点一点が大きくなったのがわかります。このsに代入する数字の大きさを変えてやればこういった感じで大きさをいじることができます。


matplotlibには他にもいろんな設定がある

今回挙げた設定は、matplotlibの中のほんの一部の一部、さわりの部分だけです。本当は散布図のプロットの色を変えたり、グリッド線を入れたり、縦横のデータの幅を変えたり、凡例を入れたり、いろいろできます。

ただ、そのあたりの設定は、前回のmatplotlibでの折れ線グラフの設定と共通する設定も多くあるので、一通りpythonとmatplotlibのグラフの描写方法を紹介したらまとめて記事にしようと思います。

慣れてくるとfor文を組み合わせたり、違うcsvのデータセットから読み取ったデータを一つのグラフの中に描画したりとかかなり奥が深いです。それこそ、前回のax.plot()と組み合わせることによって、散布図の中に回帰曲線を描画して、決定係数をテキストで入れたりといったちょっと高度でかっこいいグラフも書けるようになります。