はじめに
前回のPython入門(13)では、数値計算などでは欠かせないPythonの外部ライブラリーの一つであるNumPyについて学びました。
今回は、Python入門の第十四弾として、データの可視化ができる(グラフ化)PythonのMatplotlib入門について紹介します。
この記事を読むと次の疑問について知ることができます。
それでは、PythonのMatplotlib入門をこれから始めようとする初心者向けに分かりやすく解説していきます。
Matplotlibとは?
Matplotlibは、Pythonで色々な計算をして得たデータを視覚的に分かり易いグラフ化ができる外部ライブラリになります。
Matplotlibの読み方は「マットプロットリブ」です。
Matplotlibは、アメリカの神経生物学者であるJohn D. Hunterによりオリジナルが開発され、その後多くの方が携わって今のMatplotlibライブラリが作られており、バージョン1.0 は2010 年 7 月 6 日にリリースされています。
Matplotlibは、Python3 に対応したのが、バージョン1.2.0からであり、公式サイトを見ると非常に多くのグラフの例を見ることができます
Matplotlibの現在の最新バージョンは、3.5.3 であり、Google Colaboratory(以後、Google Colabと記述)でも既にインストールされており直ぐに利用することが可能です。
Matplotlibを使う準備
通常、PythonでMatplotlibを利用するためにはPythonにMatplotlibの拡張モジュールをインストールする必要がありますが、Google Colabを利用する場合は、既にMatplotlibはインストールされています。
Google Colab内にインストールされているMatplotlibのバージョンは 3.2.2になります。
Google Colab内に既にインストールされているライブラリにどのようなものがあるかは。前回のNumPyの記事を見て下さい。
Google Colab内に既にインストールされているMatplotlibライブラリ「matplotlib==3.2.2」があることが分かり、Matplotlibのバージョン3.2.2がインストールされていることが分かります。
matplotlibのグラフ描画(matplotlib.pyplotモジュール)を利用するには、「使うための宣言、import文」をすればよいことになります。
import matplotlib.pyplot as plt
上述の文の意味は、Matplotlibのグラフ描画モジュール(pyplot)を読み込み、使えるようにすると共に「matplotlib.pyplot」⇒「plt」として名前変更して利用しますよ』という宣言になります。
Matplotlibの基本的な使い方
Matplotlibは色々なグラフを描けますが、ここでは折れ線グラフ、棒グラフ、円グラフ、散布図、ヒストグラフ、応用としてレーダーチャートなどの書き方などを紹介します。
Matplotlibで日本語を使えるようにする準備
普通にMatplotlibを使うと日本語は文字化けしてしまい、上手く日本語が表示されません。
日本語化する方法には色々ありますが、ここでは「japanize-matplotlib」の日本語化モジュールを利用する方法を紹介します。
Google Colabには「japanize-matplotlib」の日本語化モジュールはインストールされていませんので、先ず、インストールする必要があります。
次のようにGoogle Colabに打ち込んでください。
!pip install japanize-matplotlib
折れ線グラフ
折れ線グラフは、matplotlib.pyplotのplot()メソッドを使います。
ここでは、簡単な例として前に利用した各都市でのある日のコロナ感染者数をリスト形式で指定してやり、プロットしてみます。
これらをGoogle Colabで実施した例を以下に示します。
ここには、japanize-matplotlibの日本語化モジュールのインストールやインストールした日本語を利用できるようにする文なども含まれています。
このフラフを見ると、x軸の値が0,1,2・・となっています。
これは、x軸に相当するデータを与えなかったからであり、x軸のデータをリスト形式で指定、さらに、タイトル(plt.title)、x軸ラベル(plt.xlabel)、y軸ラベル(plt.ylabel)も入れたグラフが次のグラフです。
次に各都道府県のコロナ感染者数の部分にマーカーを入れて描画してみましょう。
マーカーは多数あり、ここではよく利用する●(marker=’o’)を使って折れ線グラフを描いてみます。
その他にどのようなマーカーがあるかは次の記事を参照ください。
次は、1つのグラフに3個の折れ線グラフ(線種も変更)を描き、凡例も入れてみます。
また、タイトル(フォントサイズ18)、x軸ラベル、y軸ラベル(フォントサイズ14)のフォントサイズも少し大きくして見ました。
ここで、線種については次を参照ください。
線種 | 記号 | 線種 | 記号 |
実践 | ’-’ | 破線 | ’--’ |
一点斜線 | ’-.’ | 点線 | ’:’ |
棒グラフ
棒グラフは、matplotlib.pyplotのbar()(縦棒グラフ)やbarh()(横棒グラフ)メソッドを使います。
例として、折れ線グラフと同様に代表的な都市のコロナ感染者数を棒グラフにしてみます。
ここで、コロナ感染者数が分かり易いように縦棒グラフにはy軸にグリッド線を、横棒グラフにはx軸にグリッド線を入れてみました。
次に積み上げ棒グラフを作成して見ます、縦棒グラフの場合はbottomに、横棒グラフの場合はleftにそれぞれのYの値を足してやります。
これをするには、2つの積み上げ棒グラフまでは通常のPythonのリスト形式で指定してやればよいのですが、3つ以上の積み上げ棒グラフを作成する場合は(Pythonのリスト形式で指定してやるとエラーとなるため)、NumPyのndarray形式で指定して、積み上げするyの値を関数「array」で指定する必要があります。
次に棒グラフは、凡例(ここでは3種類日にち)の棒グラフをそれぞれ分けてグラフにしてみましょう。
棒グラフは、棒の幅はデフォルトでは0.8となっていますので、ここでは0.2の棒の幅とし、都道府県のラベルを入れるのにxticks(縦棒グラフ)、yticks(横棒グラフ)を利用します。
また、棒グラフの棒の幅を指定するのに、縦棒グラフの場合は「width」、横棒グラフの場合は「height」を用います。
円グラフ
円グラフは、matplotlib.pyplotのpie()メソッドを使います。
例として、家計費の内訳を円グラフで描いてみましょう。
家計費の内訳は、「老後の生活費はいくら必要?内訳や実態を徹底調査|準備方法も紹介」記事から引用させていただきました。
夫婦2人世帯の実際の生活費の内訳は次の通りです。
費用項目 | 毎月の平均支出額 |
食料 | 6万6,458円 |
住居 | 1万3,625円 |
光熱・水道 | 1万9,983円 |
家具・家事用品 | 1万100円 |
被服及び履物 | 6,065円 |
保健医療 | 1万5,759円 |
交通・通信 | 2万8,328円 |
教養・娯楽 | 2万4,804 円 |
その他消費支出(諸雑費や交際費など) | 5万4,806円 |
合計 | 23万9927円 |
それでは、早速これを円グラフで表示してみましょう。
ここで、「pie」に用いた引数やその他の主要な引数の意味は次の通り。
x(必須) | 円グラフのデータでリスト形式やNumPyのndarrayなどで配列としてデータを指定、ここでは、「kakeihi」として指定。 |
labels | 円グラフの各要素のラベル。ここでは、「koumoku 」として指定。(デフォルト値: None) |
explode | 円グラフの特定部分を切り出すためのパラメータで、円周上を1として、どの項目をどれだけ切り離して表示するかをリスト形式で指定 |
colors | 円グラフの各要素の色を指定。 (デフォルト値: None) |
autopct | 円グラフの構成割合をパーセンテージで表示。 (デフォルト値: None) |
pctdistance | autopctを指定した際のパーセンテージを出力する位置。円の中心 (0.0) から円周 (1.0) を目安に指定。 (デフォルト値: 0.6) |
shadow | 円グラフの影をTrue に設定すると表示。 (デフォルト値: False) |
labeldistance | ラベルを表示する位置。円の中心 (0.0) から円周 (1.0) を目安に指定。 (デフォルト値: 1.1) |
startangle | 円グラフの各要素の出力を開始する角度。 (デフォルト値: 時計の3時の位置) |
radius | 円グラフの円の半径。 (デフォルト値: 1) |
counterclock | True に設定すると反時計回りで出力。False に設定すると時計回りで出力。 (デフォルト値: True) |
wedgeprops | ドーナツグラフを作成時に利用。 (デフォルト値: None) |
textprops | テキストに関するプロパティ。 (デフォルト値: None) |
次に、円グラフが小さいので半径を2倍とし、それぞれの組成の百分率を入れ、これらラベルのフォントサイズを12とし、タイトルにフォントサイズ18で「夫婦2人世帯の生活費の内訳」と入れて見ます。
ここで、タイトルの引数で「pad」は、グラフとタイトルの距離を指定するパラメーターで、円グラフの半径が「1」(デフォルト値)ならば、padパラメーターを指定しなくとも丁度良い位置に配置してくれますが、この円グラフは半径を「2」としているために、padパラメータを「80」と指定して円グラフの上にくるようにしています。
それから、内訳の%表示の指定の仕方は次の表を参照ください。
%の書式の指定の仕方 | 表示内容 | 表示例 |
"%.d" | 小数点なしの整数のみ | 5 |
"%.d%%" | 小数点なしの整数 + % | 5% |
”%0.1f” | 小数点1桁 | 5.2 |
”%0.1f%%” | 小数点1桁 + % | 5.2% |
"%0.2f%%" | 少数点2桁 + % | 5.23% |
次に、「保険医療」の部分を切り出して表示してみましょう。
円グラフの最後は、ドーナツグラフを作成し、ドーナツグラフの中心にタイトルを入れてみました。
散布図
散布図は、matplotlib.pyplotのscatter()メソッドを使います。
scatter()の主要な引数には次のようなものがあります。
x, y | グラフに出力するデータ |
s | マーカーサイズ (デフォルト値: 20) |
c | マーカーの色、または、連続した色の値 |
marker | マーカーの形 (デフォルト値: ‘o’= 円)、折れ線グラフを参照 |
cmap | カラーマップでc が float 型の場合のみ利用可能 |
alpha | 透明度で、0(透明)~1(不透明)の間の数値を指定 |
linewidths | 線の太さ |
edgecolors | 線の色 |
ここでは、散布図の例として身長と体重の関係をグラフにしてみたいと思います。
身長と体重の関係は、次の記事を参照させていただきました。
また、身長と体重の関係のデータ(csv)を読み込み、PandasのDataFrameを利用してグラフを作成して見ます。なお、Pandasの詳細については次回以降に紹介したいと思います。
Google Colabで身長と体重の関係のデータ(csv)を利用するためには、Google Colabの左メニューの「ファイル」⇒「アップロード」と順にクリックして、作成した身長と体重の関係のデータ(csv)を指定して読み込みます。
読み込んだ身長と体重のデータのトップ5行目までを表示すると次のようになります。
そして、このデータを用いて散布図を描いたのが次のグラフです。
このグラフにはタイトル(18ポイント)、X,Y軸のラベル(14ポイント)、x,yグリッド、凡例も入れています。
ヒストグラム
ヒストグラムは、matplotlib.pyplotのhist()メソッドを使います。
hist()の主要な引数には次のようなものがあります。(次の記事から引用)
x (必要) | ヒストグラムを作成するためのデータの配列。 |
bins | ビン (表示する棒) の数、階級数。(デフォルト値: 10) |
range | ビンの最小値と最大値を指定。(デフォルト値: (x.min(), x.max()で指定)) |
normed | True に設定すると正規化 (合計値が 1 になるように変換) を実施。 (デフォルト値: False) |
cumulative | True に設定すると、累積ヒストグラムを出力。 (デフォルト値: False) |
bottom | 各棒の下側の余白を数値または配列で指定。 |
histtype | ‘bar’ (通常のヒストグラム), ‘barstacked’ (積み上げヒストグラム), ‘step’ (線), ‘stepfilled ‘ (塗りつぶしありの線) から選択。 (デフォルト値: ‘bar’) |
align | 各棒の中心を X 軸目盛上のどの横位置で出力するかの指標。 ‘left’, ‘mid’, ‘right’ から選択。(デフォルト値: ‘mid’) |
orientation | 棒の方向。’horizontal’ (水平方向), ‘vertical’ (垂直方向) から選択。(デフォルト値: ‘vertical’) |
rwidth | 各棒の幅を数値または、配列で指定。 |
log | True に設定すると、縦軸を対数目盛で表示。 |
color | ヒストグラムの色。配列で指定し、データセット単位で色を指定することが可能。 |
label | 凡例を載せる際に使用。 |
stacked | True に設定すると積み上げヒストグラムで出力します。False に設定すると、横に並べて出力します。 |
ヒストグラムの例として、NumPyで正規分布の乱数を2つ発生させ、それらをデータとして与え、ヒストグラムを描いてみます。
このグラフにはタイトル(18ポイント)、X,Y軸のラベル(14ポイント)、凡例も入れています。
レーダーチャート
Matplotlibには、レーダーチャートのメソッドはありません。
そこで、色々記事を調べたら次の記事にMatplotlibでレーダーチャートを作成する方法が載っていましたので、これを参考にして、ある日の食べた食事の栄養素('エネルギー', 'たんぱく質', '脂質', '炭水化物', 'ナトリウム', 'カルシウム', '鉄', 'ビタミンA', 'ビタミンB1', 'ビタミンC')が食事摂取基準に対してどの程度の割合(各栄養素が100が摂取基準で、100より少なければ摂取基準値より少なく、100より多ければ摂取基準値より多い)で満たしているかを表示するレーダーチャートを作成してみました。
プログラムは結構長くなりますが、説明を付けてあるので分かると思います。なお、プログラムには、matplotlib.pyplot、numpyなどのimport文やjapanize-matplotlibの日本語化モジュールのインストール、import文は除いていますので、Google Colabで前に実施した上述の文を実行してからレーダーチャートのプログラムを実行するようにして下さい。
Matplotlib.pyplot.plotメソッドで極座標を使って描いています。
おわりに
如何だったでしょうか?
Matplotlibとは?、Matplotlibを使う準備、Matplotlibの基本的な使い方、Matplotlibで日本語を使えるようにする準備、折れ線グラフ、棒グラフ、円グラフ、散布図、ヒストグラム、レーダーチャートなどについて解説してきました。
この記事を読みながらPythonのグラフ化ライブラリーのMatplotlibを学んでもらえればと思います。
次をお楽しみに?
以上です。
コメント