Matplotlib で Python グラフを自在に描く — 科学・ビジネス・教育に使える定番可視化ライブラリ
bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。
(macOS / Linux 環境が必要) Matplotlib で Python グラフを自在に描く — 科学・ビジネス・教育に使える定番可視化ライブラリ
ひとことでいうと
Matplotlib は Python でグラフを描くためのライブラリ(機能をまとめたソフトの部品集)の中で、事実上の標準と呼ばれるほど広く使われているツールです。折れ線グラフ・散布図・ヒストグラム・棒グラフ・3D プロット・アニメーションなど、ほぼあらゆる種類のグラフを一本のライブラリで作ることができます。2003 年に開発が始まり、世界中の研究者・データサイエンティスト・エンジニアに使われてきた実績ある道具です。NumPy や pandas などの Python データ処理ライブラリとも自然につながるため、「データを集めてそのまま図にする」という流れがスムーズに作れます。
こんな人におすすめ
1. 論文やレポートに図を入れたい研究者・学生 実験データの散布図、エラーバー付きグラフ、ヒートマップなどを PDF や SVG 形式で書き出して LaTeX ドキュメントに貼り込む使い方が定番です。コードとして図の作り方を残せるので、データが変わっても同じ手順で再現できます。
2. データを手早く分析・可視化したいデータサイエンティスト・アナリスト
pandas(データ集計に使われる Python ライブラリ)の df.plot() という命令は内部で Matplotlib を呼び出しています。棒グラフ・箱ひげ図・ヒストグラムなど統計可視化の種類が豊富で、分析の初歩から本格的なレポートまで一貫して使えます。
3. Web アプリやビジネスツールにグラフを組み込みたい開発者 Django や FastAPI(どちらも Python で Web サービスを作るフレームワーク)と組み合わせて、サーバー側でグラフ画像を動的に生成してブラウザに返す構成が広く採用されています。CSV ファイルを受け取って即座にグラフ画像を返す API なども比較的少ないコードで実現できます。
インストール・使い方
Matplotlib は PyPI(Python の公式パッケージ配布サービス)と conda-forge の両方で配布されています。コンパイル済みのファイルが用意されているため、通常は C 言語のコンパイラ(プログラムをコンピュータが実行できる形に変換するツール)がなくてもインストールできます。
Step 1 — pip でインストールする(最もかんたんな方法)
ターミナル(文字で命令を送る画面。Mac なら「ターミナル」、Windows なら「コマンドプロンプト」や「PowerShell」)を開いて、以下のコマンドをコピー&ペーストして Enter キーを押します。
pip install matplotlib
pip は Python に付属するパッケージ管理ツールで、インターネットから自動でダウンロード・インストールしてくれます。NumPy(数値計算ライブラリ)など必要な部品も一緒に取得されます。
Step 2 — Anaconda / conda を使っている場合
Anaconda(データサイエンス向けの Python ディストリビューション)を利用している場合は、こちらのコマンドを使います。
conda install -c conda-forge matplotlib
-c conda-forge は「conda-forge というチャンネル(追加パッケージ倉庫)から取得する」という指定です。
Step 3 — インストールできているか確認する
import matplotlib
print(matplotlib.__version__)
バージョン番号が表示されれば成功です。エラーが出た場合は Step 1 をやり直してみてください。
Step 4 — はじめてのグラフを描く
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)
plt.figure(figsize=(8, 4))
plt.plot(x, y, label='sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.title('正弦波')
plt.legend()
plt.tight_layout()
plt.savefig('output.png', dpi=150)
plt.show()
np.linspace で 0 から 2π までの数値を 200 点作り、np.sin で各点の正弦値を計算しています。plt.plot で折れ線グラフを作り、plt.savefig で PNG 画像として保存、plt.show でウィンドウを開いて確認するという流れです。Jupyter Notebook(ブラウザ上でコードを実行できる対話型の環境)では、先頭に %matplotlib inline と書くとセルの出力欄に直接グラフが表示されます。
動かしてみた
実際に使い始める前に、環境やスペックについて知っておくと安心です。
- Python バージョン: 3.9 以上が必要です。3.12 でも動作確認されています。
- ディスク容量: インストール後の目安は 40〜60 MB 程度です。依存パッケージ(Pillow・kiwisolver・pyparsing・cycler など)が自動的に一緒にインストールされます。
- OS: Linux・macOS・Windows のいずれでも動作します。通常は追加の設定なしで使えます。
- ソースからビルドする場合: ソースコードから自分でビルド(コンパイル)したい場合は、Linux/macOS では gcc または clang、Windows では Visual Studio Build Tools が必要です。ただし一般的な用途では PyPI のバイナリホイール(コンパイル済みの配布ファイル)を使うことが公式に推奨されており、ビルド環境は不要です。
- 必須の依存パッケージ: NumPy だけで、インストール時に自動取得されます。
この条件を満たしていれば、Step 1 のコマンド一行でスムーズに導入できます。
ブラウザで試す(デモ)
インストールしなくてもブラウザ上でサンプルグラフを生成して確認できる Gradio デモが用意されています。関数の種類(sin / cos / tan)や振幅・周波数をスライダーで切り替えながら、Matplotlib が出力するグラフをリアルタイムで観察できます。まずどんなグラフが作れるかを見てみたい方は、こちらで手軽に体験できます。
実践のコツ — すぐ使えるチャート早見き
よく使うグラフの種類と基本の呼び出し方をまとめました。まずはこれをコピーして動かしてみるところから始めるのがおすすめです。
import matplotlib.pyplot as plt
import numpy as np
# 折れ線グラフ
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
# 散布図(alpha で透明度を指定)
plt.scatter(np.random.randn(50), np.random.randn(50), alpha=0.5)
# ヒストグラム
plt.hist(np.random.randn(1000), bins=30)
# 棒グラフ
plt.bar(['A', 'B', 'C'], [10, 24, 7])
# 複数のグラフを横に並べる
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].plot([0, 1, 2], [0, 1, 0])
axes[1].bar(['X', 'Y'], [3, 7])
plt.tight_layout()
plt.show()
実践でおさえておきたいポイントを以下にまとめます。
- スタイルを一行で変える:
plt.style.use('ggplot')やplt.style.use('seaborn-v0_8')と書くだけで、グラフ全体のデザインがテーマごとに切り替わります。 - サブプロットで複数グラフをまとめる:
plt.subplots(行数, 列数)を使うと、一枚の図に複数のグラフを整列して並べられます。 - ファイルに保存する:
plt.savefig('filename.png', dpi=150)で PNG 保存、拡張子を.pdfや.svgに変えるだけで形式が切り替わります。 - グラフの見た目を細かく調整する: 線の色は
color='red'、太さはlinewidth=2、マーカーの形はmarker='o'のようにキーワード引数で指定できます。 - 軸の範囲を指定する:
plt.xlim(0, 10)やplt.ylim(-1, 1)で表示範囲を絞れます。データの外れ値に引っ張られず見やすくなります。 - 複数データを重ねて比較する:
plt.plot()を複数回呼ぶと同じグラフに重ね描きできます。label引数とplt.legend()を組み合わせると凡例も自動で作れます。
用語とポイント解説
pyplot(パイプロット)
matplotlib.pyplot はグラフを手早く描くためのインターフェース(操作窓口)です。かんたんに言うと「plt.plot() のような短い命令でグラフを描くための便利な入口」です。内部では Figure(図全体)と Axes(グラフ領域)を自動で管理してくれるため、初心者が最初に使う部分です。
Figure(フィギュア)
グラフ全体を包む「キャンバス」にあたるオブジェクトです。かんたんに言うと「一枚の絵を収める額縁」のようなものです。plt.figure(figsize=(8, 4)) で横幅・縦幅をインチ単位で指定できます。サイズ・解像度・背景色などを管理します。
Axes(アクシーズ) Figure の中に配置される「実際にグラフが描かれる領域」です。かんたんに言うと「額縁の中の絵そのもの」です。x 軸・y 軸・グリッド・タイトルなどはすべて Axes が持っています。複数の Axes を並べることで複数グラフを一枚にまとめられます。
バックエンド(backend)
グラフをどこに表示するかを制御する仕組みです。かんたんに言うと「グラフを画面に出すか、ファイルに保存するか、Jupyter に埋め込むかを切り替えるスイッチ」です。Agg バックエンドはファイル保存専用で、GUI ウィンドウなしでサーバー環境でも動きます。
DPI(ドット・パー・インチ)
画像の解像度を表す単位です。かんたんに言うと「1 インチに何個のドットを詰め込むか」という数値で、大きいほど高精細になります。savefig('output.png', dpi=150) のように指定でき、印刷用には 300 dpi 前後が推奨されます。
tight_layout(タイトレイアウト)
複数サブプロットを並べたとき、軸ラベルやタイトルが重ならないよう余白を自動調整する命令です。かんたんに言うと「グラフがはみ出たり重なったりしないよう、自動で位置を整えてくれる機能」です。plt.tight_layout() を savefig の直前に呼ぶのが定番です。
PdfPages(ピーディーエフページズ)
複数のグラフを一つの PDF ファイルにまとめて保存するためのクラス(機能のかたまり)です。かんたんに言うと「何枚もグラフをまとめて一冊のレポートに製本してくれる機能」です。with PdfPages('report.pdf') as pdf: pdf.savefig(fig) のように使います。
NumPy(ナムパイ)
Matplotlib と組み合わせて使う数値計算ライブラリです。かんたんに言うと「大量の数値をまとめて高速に計算するための道具箱」で、np.linspace で均等な数値列を作ったり np.sin で三角関数を一括計算したりできます。Matplotlib は NumPy 配列をそのままグラフの入力として受け取れます。
インタラクティブモード
plt.ion() を呼ぶと有効になる、グラフをリアルタイムで更新できるモードです。かんたんに言うと「データが変わるたびにグラフが自動で書き換わる動的表示モード」です。センサーデータのリアルタイム可視化やアニメーションの実装に使われます。
活用例
- 機械学習モデルの学習曲線: 訓練データと検証データの損失(loss)や正解率(accuracy)を epoch(学習の繰り返し回数)ごとに折れ線グラフで描き、過学習(モデルが訓練データに偏りすぎる現象)を視覚的に検出する。
- 気象データの時系列分析: 気温・降水量などの月次データを棒グラフと折れ線の複合グラフで表現し、季節変動のパターンをひと目で把握するレポートを作成する。
- 定期 PDF レポートの自動生成:
PdfPagesクラスを使って複数のグラフを一つの PDF にまとめ、毎朝売上データを取得してグラフ付き PDF を自動生成・配信するバッチ処理を組む。 - Jupyter Notebook 上での探索的データ分析:
ipymplバックエンドと組み合わせてスライダーでパラメータを変えながらグラフを動的に更新し、データの傾向を対話的に調べる分析環境を作る。 - 科学論文・学会発表用の図の作成: エラーバー付き散布図やヒートマップを SVG 形式で書き出し、LaTeX ドキュメントや PowerPoint スライドに貼り込んで発表資料を仕上げる。
- Web ダッシュボードへのグラフ画像埋め込み: Django や FastAPI で構築した管理画面に、CSV アップロード → Matplotlib グラフ生成 → PNG 画像レスポンスというパイプラインを組み込み、ノーコードでデータを可視化できる業務ツールを作る。
まとめ
Matplotlib は「Python でグラフを描く」という目的においてほぼすべての用途をカバーする、成熟した可視化ライブラリです。シンプルな折れ線グラフから論文品質の多軸グラフ、3D サーフェス、アニメーションまで一貫した API で操作できます。pandas・NumPy・scikit-learn など Python データ処理エコシステムとの深い連携も強みで、データサイエンス・科学技術計算・ビジネスレポートのいずれにも対応できます。バイナリホイールによる簡単インストールと豊富な公式ドキュメント・サンプルギャラリーのおかげで、初心者から上級者まで学習コストを抑えて使い始められる点が最大の特徴です。
ぜひ機械学習の結果の可視化や定期レポートの自動生成、Jupyter Notebook を使った探索的データ分析などに活用してみてはいかがでしょうか。