皆さん、こんにちは。
南波真之(なんばさねゆき)と申します。
私はエンジニアではない文系の人間ですが、Pythonの可能性やデータ分析を使った仕事に興味があります。
前回はPythonでのデータ分析を用意にする機能のライブラリであるpandasを使い、基礎統計量を出すところを取り上げました。基礎統計量とは、最大値や平均値、標準偏差などの統計において一般的に使われるデータのことで、pandasを使うことでではかんたんに算出することができます。
外部のデータを読み込んで、それを統計的に分析する際などに重宝する方法ですので、ご興味ある方はぜひご覧ください。
さて、今回はMatplotlibです。私が勉強している『Pythonによるあたらしいデータ分析の教科書(翔泳社)』の、P176.〜P.184の部分です。Matplotlibを使い、2次元グラフを描画するところを学習してみました。
Matplotlibとは
Matplotlibは、Pythonで主に2次元グラフを描画するためのライブラリです。データの可視化にとても便利で、今回も使用していくJupyterLabとも親和性が高いためよく使われています。グラフとしては棒グラフ、折れ線グラフ、散布図など様々な表現が可能です。
この記事では学習のメイン教材としている『Pythonによるあたらしいデータ分析の教科書』で使われている「オブジェクト指向スタイル」の方法でMatplotlibの描画を進めます。これは、描画オブジェクトに対してサブプロットを追加し、サブプロットに対してグラフを描画する方法です。1つのキャンパスにサブプロット(サブキャンパス)を複数用意してそこに描画をさせることで複数のグラフをまとめて表現できるため汎用性が高い方法です。
1つサンプルの表示をさせてみます。
# matplotlibライブラリの呼び出し。今後pltの3文字で呼び出しができるように as plt としている。 import matplotlib.pyplot as plt # データを用意 x = [3, 7, 13] y = [1, 10, 18] # 描画オブジェクト(fig)とサブプロット(ax)を生成する fig, ax = plt.subplots() # 折れ線グラフ表示 ax.plot(x, y) # グラフにタイトルをつける ax.set_title(‘テストタイトル’,fontname=”Meiryo”) # x軸の軸ラベルを設定 plt.xlabel(‘x軸ラベル’) # y軸の軸ラベルを設定 plt.ylabel(‘y軸ラベル’) # グラフを表示 plt.show() |
描画結果はこのようになります。

かんたんに描画ができましたね。このようにMatplotlibは使っていくのですが、文字化けしているところが気になります。
そこで次は文字化けの解消を行います。
タイトルや軸を日本語で表示させようとすると最初は文字化け状態になることが多いと思いますので、以下の方法で解消していきます。
Matplotlibの文字化けを解消する
調べてみると多くの方法がありましたが、japanize-matplotlibというものを利用する方法が一番かんたんでした。
以下の流れをJupyterLabで実行していきます。
手順1:japanize-matplotlibのインストール
!pip install japanize-matplotlib |
※ 「!」マークを先頭につけることでOSのコマンドを呼ぶことができます
手順2:ライブラリのインポート
import japanize_matplotlib |
手順3:先程と同じくMatplotlibにてグラフを描画
# matplotlibライブラリの呼び出し。今後pltの3文字で呼び出しができるように as plt としている。 import matplotlib.pyplot as plt # データを用意 x = [3, 7, 13] y = [1, 10, 18] # 描画オブジェクト(fig)とサブプロット(ax)を生成する fig, ax = plt.subplots() # 折れ線グラフ表示 ax.plot(x, y) # グラフにタイトルをつける ax.set_title(‘テストタイトル’) # x軸の軸ラベルを設定 plt.xlabel(‘x軸ラベル’) # y軸の軸ラベルを設定 plt.ylabel(‘y軸ラベル’) # グラフを表示 plt.show() |
すると描画はこの様になりました。

文字化けは無事解消できました。
描画方法についてはここまでで雰囲気がわかりましたので、基礎に戻って描画オブジェクトを深堀りしてみます。
描画オブジェクト
Matplotlibでグラフを表現する際のポイントは以下の2点です。
- 描画オブジェクト(figure)を生成する
- 描画オブジェクトの中に1つ以上のサブプロット(subplot)を配置する
先ほど描画したコードの場合、
fig, ax = plt.subplots() |
という記述をしましたが、figはfigureのことで描画領域全体を示し、axはaxisのことで個別のプロットを描く領域のことを指しています。この記述は決り文句のようなもののようで、1つの描画オブジェクトを生成し、その中に1つのサブプロットを配置して、figとaxという変数に格納しているという意味です。
それではサブプロットを複数用意する場合ですが、subplots()に数字を指定するだけです。
サブプロット2つ作りたい場合は、このようにします。
fig, axis = plt.subplots(2) |

行と列を指定することも可能です。例えば2行3列のサブプロットの場合はこのようになります。
fig, axis = plt.subplots(2, 3) |

ちなみにこの行と列は引数も用意されており、nrows、ncolsでも指定できます。どちらの書き方でも良いようですが、覚えておきたいところです。
グラフの表現
冒頭のコードでいくつか使いましたが、グラフを見やすくするための機能がMatplotlibにはたくさん存在しています。まとめると以下のようになります。
- タイトル
- サブプロットにタイトルを設定する場合
- ax.set_title(‘タイトル文’)
- 描画オブジェクトにタイトルを設定する場合
- fig.suptitle(‘タイトル文’)
- サブプロットにタイトルを設定する場合
- 軸ラベル
- X軸にラベル設定する場合
- ax.set_xlabel(‘ラベル名’)
- Y軸にラベルを設定する場合
- ax.set_ylabel(‘ラベル名’)
- X軸にラベル設定する場合
- 凡例
- ax.legend(どのように凡例を表示するかを指定)
- ax.legend(loc=’best’)で、凡例をデータの重なりが最小のいい感じのところに表示してくれる
- ax.legend(どのように凡例を表示するかを指定)
これらを使うと、文字フォントや文字サイズ、文字色の調整も可能となります。
試しにデータを作って色々やってみました。
# 描画オブジェクト(fig)とサブプロット(ax)を生成する fig, ax = plt.subplots() # データセット: クラスごとの数学平均点推移として数字を用意 # 変数xには月(12ヶ月)を、変数y1〜y3は各クラスの平均点を入れる x = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] y1 = [83, 72, 58, 60, 80, 77, 63, 52, 88, 64, 50, 77] # 1組 y2 = [78, 72, 65, 67, 74, 85, 71, 49, 89, 62, 82, 85] # 2組 y3 = [69, 80, 69, 56, 82, 62, 73, 60, 84, 80, 69, 83] # 3組 # グラフにタイトルをつける ax.set_title(‘2021年のクラスごとの数学平均点推移’) # x軸の軸ラベルを設定 plt.xlabel(‘月’) # y軸の軸ラベルを設定 plt.ylabel(‘点数’) # 描画 ax.plot(x, y1, label=’1組’, color=’red’) ax.plot(x, y2, label=’2組’, color=’aqua’) ax.plot(x, y3, label=’3組’, color=’blue’) ax.legend(loc=’best’) # 凡例の表示:左上に表示 ax.grid() # グリッド線を追加 # 画像ファイルに出力 fig.savefig(‘matplotlib-mathscore2021.png’) |

いかがでしょうか。
ここまで自由に表示を変えることができます。色々触っていくと楽しいですし、最後にpng形式で画像データとして出力させましたのでこのグラフの画像データまで作ってくれます。
細かい指定はMatplotlibの公式ドキュメントに記載があります。興味があればぜひご覧ください。
データ分析の結果をわかりやすく可視化する重要性
いかがでしたでしょうか。
今回はMatplotlibを使い、どのような考え方でどのようにグラフに描画できるのかを取り上げてきました。
Numpyやpandasなども駆使してデータ分析を行い、それを周りにわかりやすい形で描画を行うことまでがデータ分析の一連の流れです。
ここまでできると更に学習が楽しくなって来ると思います。
外部からデータを読み込んでMatplotlibで描画をしてみても良いですし、今回私が行ったように簡易的にデータをつくって描画を試してみるところから入ってみるのはいかがでしょうか。
PythonやMatplotlibはあくまでツールに過ぎません。一番大事なことはこのツールを使って何がしたいか、何を知りたいかです。この部分を忘れずに私も勉強を進めていきたいと思っています。
インターネット・アカデミーは、Python講座が充実しています。Python認定スクールにもなっているため質の高い知識を得ることができ、基礎学習の先にあるそれぞれの目標を目指していくためには良い場所となります。
よく、「プログラミングは独学でもなんとかなる」という情報もありますが、新しいことを学んでいく際の近道は「プロに教えてもらうこと」だと思います。
インターネット・アカデミーはキャリアサポートも充実しており、一人ひとりに専任のキャリアプロデューサーがサポートしてくれるため中途半端になることがありません。
ご興味ある方は各講座のページを覗いてみてください。無料カウンセリングもできます。
Pythonの基礎からDjangoフレームワークを使ったWebアプリケーションを作りたい方向けの「Python講座」
Pythonを活用したAIプログラミング、機械学習を実装したい方向けの「AIプログラミング講座」