Pythonでデータ分析をする際にグラフなどの可視化でよく利用されるmatplotlibの基本的な使用方法について解説します。
Contents
matplotlibによるデータの可視化
データ分析では、対象データや解析した結果を可視化するということが必ずと言っていいほど出てきます。Pythonのデータ可視化のパッケージとして有名なものがmatplotlibです。
pythonでのデータ分析では、numpy、pandas、matplotlib、scikit-learnがセットで出てくることが多いかと思います(他にも有用なパッケージは沢山あります)。データ可視化手法としてmatplotlibの使い方を覚えていくことは有効です。
本記事では、matplotlibの基本的な使い方について紹介します。
matplotlibのインストール
matplotlibを使用するためにはパッケージのインストールが必要です。matplotlibがインストールされていない場合は、以下のpipコマンドを使ってインストールしてください。
pip install matplotlib
matplotlibの基本的な使い方
以降では、matplotlibを使った簡単なデータ可視化について解説します。
matplotlibのインポート
matplotlibを使用するには、まずmatplotlibをimportします。matplotlibを使用する場合は、インポートする際にmplやpltのような省略形として使うのが一般的となっています。
import matplotlib as mpl import matplotlib.pyplot as plt
以降で紹介するコードは上記のようにimportがされていることを前提とします。
スタイル設定
matplotlibでは、描画スタイルを設定することができます。スタイル設定をするにはstyle.useメソッドを使用します。
以下は’classic’スタイルに設定する場合の設定方法です。この設定をすることでグラフの表示スタイルを変更することができます。
plt.style.use("classic")
この設定をしなくてもmatplotlibは利用できますが、自分の目的に沿ったスタイルを設定して表示できることを覚えておくとよいでしょう。
また、使用できるスタイルを確認するには以下のようにstyle.availableを表示すること確認できます。なお、以下の例はprint関数を使用していますが、IPythonのコンソールやJupyter Notebookを使用している場合は、シンプルに「plt.style.available」を実行するだけで確認ができます。
print(plt.style.available)
【実行結果例】 ['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-v0_8', 'seaborn-v0_8-bright', 'seaborn-v0_8-colorblind', 'seaborn-v0_8-dark', 'seaborn-v0_8-dark-palette', 'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep', 'seaborn-v0_8-muted', 'seaborn-v0_8-notebook', 'seaborn-v0_8-paper', 'seaborn-v0_8-pastel', 'seaborn-v0_8-poster', 'seaborn-v0_8-talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white', 'seaborn-v0_8-whitegrid', 'tableau-colorblind10']
matplotlibでの描画方法
Pythonスクリプトで描画する場合
Pythonのスクリプト内でmatplotlibを用いた描画をする場合には、以下の例のように使用します。
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) plt.show()
上記の例では、numpyのlinspaceで横軸であるxのデータを作成し、sin(x)およびcos(x)を表示しています。
スクリプトで実際に画面描画する場合には、showメソッドを実行する必要があります。「plt.show()」というコマンドを忘れずに記述するようにしましょう。
IPythonのコンソールで描画する場合
IPythonのコンソールで実行する場合には以下のように「%matplotlib」というマジックコマンドを使用することでmatplotlibの描画をすることができます。実行している内容は上記の例と同じsin(x), cos(x)の描画です。
IPythonで実行する場合には、plotのたびにFigureに追記されていきます。
【plt.plot(x, np.sin(x))の実行後】
【plt.plot(x, np.cos(x))の実行後】
IPythonやマジックコマンドの概要についてご存じない方は「IPython ~拡張された対話型インタプリタ~」を参考にしていただければと思います。
Jupyter Notebookで描画する場合
numpyやpandas等を利用する多くの方が実行環境としてJupyter Notebookをしているかと思います。Jupyter Notebookでのプロットはとても簡単です。
Jupyter Notebookでインラインで画像を表示するためには「%matplotlib inline」というマジックコマンドを含めます。これにより、インラインで画像化したグラフを埋め込んで表示してくれます。 実行している内容は上記の例と同じsin(x), cos(x)の描画です。
Jupyter Notebookの基本的な使用方法を確認したい場合は「Jupyter Notebookの基本的な使い方」を参考にしていただければと思います。
描画したグラフを画像として保存する方法
スクリプトから画像として保存する場合には以下のように「savefig」メソッドを使用します。
メソッドを使用するために「fig = plt.figure()」というコードでFigureクラスのインスタンスを用意している点が上記の例とは違います。
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) fig = plt.figure() plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x)) fig.savefig("temp.png") plt.show()
なお、保存する画像の種類はファイル名の拡張子から自動で判別して保存してくれます。使用している環境で使用できる拡張子は以下で確認することができます。
print(fig.canvas.get_supported_filetypes())
{'eps': 'Encapsulated Postscript', 'jpg': 'Joint Photographic Experts Group', 'jpeg': 'Joint Photographic Experts Group', 'pdf': 'Portable Document Format', 'pgf': 'PGF code for LaTeX', 'png': 'Portable Network Graphics', 'ps': 'Postscript', 'raw': 'Raw RGBA bitmap', 'rgba': 'Raw RGBA bitmap', 'svg': 'Scalable Vector Graphics', 'svgz': 'Scalable Vector Graphics', 'tif': 'Tagged Image File Format', 'tiff': 'Tagged Image File Format', 'webp': 'WebP Image Format'}
IPythonのコンソールやJupyter Notebookを使用している場合は、シンプルに「fig.canvas.get_supported_filetypes()」を実行するだけで確認することができます。
また、もちろんですが表示されているFigureの保存ボタンからファイル名を指定して保存することも可能です。
まとめ
Pythonでデータ分析をする際にグラフなどの可視化でよく利用されるmatplotlibの基本的な使用方法について解説しました。
matplotlibは、numpyやpandas、scikit-learn等と共にデータ分析でよく活用される可視化ライブラリです。是非、使い方を色々と覚えてもらえるとよいかと思います。
matplotlib関連は他にも以下のようなページをまとめています。興味がある項目があれば参考にしていただければと思います。
matplotlibの公式ドキュメントはこちらを参考にしてください。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。