python matplotlib入門:インストールから基本プロットまで完全ガイド

この記事では、Pythonの可視化ライブラリMatplotlibの概要からインストール方法、pyplotやFigure/Axesの基本、折れ線・棒・散布図・円・ヒストグラム・箱ひげ図など代表的なグラフ作成、ラベルや軸範囲調整、複数グラフの描画、画像出力までを解説し、データを分かりやすく伝えるグラフ作成の悩みを解決します。

目次

Matplotlibとは何か:Pythonで可視化するための基本

python+matplotlib+visualization

Matplotlib(マットプロットリブ)は、Pythonでグラフや図を描くための代表的な可視化ライブラリです。データ分析や機械学習の結果を「見える形」に整える用途で広く使われており、折れ線・棒・散布図などの基本チャートから、論文やレポート向けの細かな体裁調整まで対応できます。とくに「python matplotlib」で検索されることが多いのは、Pythonのコードで再現性の高い可視化を行える点が評価されているためです。

Matplotlibでできること(主な用途と得意領域)

Matplotlibの強みは、汎用性と表現力の高さにあります。データの探索的分析(EDA)で素早く傾向を掴む場面から、社内レポート・学術用途の図表作成まで、用途の幅が広いのが特徴です。

  • 基本的なグラフ作成:折れ線グラフ、棒グラフ、散布図、ヒストグラムなど、分析で頻出する可視化を一通りカバーできます。
  • 複数要素の同時可視化:同一図への重ね描き、複数の図を並べるレイアウトなど、比較・検証のための構成を作れます。
  • 見栄えの細かな制御:フォント、色、線種、凡例、注釈、目盛り、余白などを細部まで調整でき、提出物レベルの品質に仕上げられます。
  • 画像としての出力:作成した図を画像ファイルとして扱えるため、資料作成・報告書・Web掲載などに展開しやすいです。

一方で、インタラクティブなダッシュボード用途や、リアルタイムに操作するUI中心の可視化が目的の場合は、他の可視化手段と併用・使い分けを検討するのが現実的です。Matplotlibは特に「静的な図を正確に作る」領域で力を発揮します。

Excelなど他ツールと比べたメリット・使い分け

可視化というとExcelのグラフ機能も定番ですが、Matplotlibは「コードで作る」ことに価値があります。目的やチームの状況に応じて、Excelとpython matplotlibを賢く使い分けるのがポイントです。

Matplotlibが優れている点

Matplotlibの大きな利点は、再現性・自動化・拡張性です。Excelは手作業で整形しやすい反面、作業手順が属人化しやすく、同じ作図を何度も繰り返すほど手間が増えます。Matplotlibなら、手順をコード化して何度でも同じ品質で出力できます。

  • 再現性が高い:データが更新されても同じコードで同じ形式のグラフを生成でき、レポートの定期作成に向きます。
  • 自動化しやすい:複数ファイル・複数条件のグラフを一括生成するなど、繰り返し作業を効率化できます。
  • 細部まで制御できる:軸や目盛り、注釈位置、フォントなど、意図通りに厳密な調整が可能です。
  • 分析フローと直結する:前処理→集計→可視化までPython上で一貫して行えるため、分析過程が追跡しやすくなります。

使い分けの観点では、手元で素早く作る単発のグラフや、非エンジニア中心の共有・編集が前提ならExcelが便利です。一方、定型レポートデータ更新が頻繁品質を揃えたいといった条件ではMatplotlibが有利になります。

オープンソースで無償に使える特徴

Matplotlibはオープンソースとして開発・公開されており、基本的に無償で利用できます。特定のベンダー製品に依存せず、個人の学習用途から業務利用まで導入しやすい点は、python matplotlibが広く普及している理由の一つです。

  • 導入コストを抑えられる:ライセンス購入が前提のツールと比べて、利用開始のハードルが低いです。
  • ナレッジが豊富:利用者が多く、作図パターンや課題への対処法が蓄積されています。
  • 長期運用しやすい:特定環境に閉じず、チームやPCが変わっても同じコード資産を引き継ぎやすくなります。

結果として、Matplotlibは「コストを抑えつつ、再現性のある可視化を継続的に回したい」場面で、非常に相性の良い選択肢になります。

導入手順:Matplotlibのインストールと環境準備

python+matplotlib+jupyter

python matplotlib を使ってグラフを描き始めるには、まず「Python本体の用意」→「Matplotlibのインストール」→「作業環境(Jupyter Notebookなど)の準備」→「Notebook上での有効化」という順で整えるのが最短ルートです。このセクションでは、はじめての人でも迷いにくい導入手順を、確認ポイントとコマンド例つきでまとめます。

事前準備:Pythonのインストールとバージョン確認

MatplotlibはPython上で動作するライブラリのため、最初にPythonのインストール状況とバージョンを確認します。環境差によるトラブルを避けるためにも、作業開始前に必ずチェックしておきましょう。

  • Pythonが未インストールの場合:公式サイト(python.org)からインストーラを入手して導入します。
  • 既にインストール済みの場合:ターミナル(WindowsはPowerShell/コマンドプロンプト、macOS/LinuxはTerminal)でバージョンを確認します。
python --version
# もしくは環境によっては
python3 --version

バージョン確認ができたら、次にpip(Pythonのパッケージ管理ツール)が利用できるかも確認しておくとスムーズです。

pip --version
# もしくは
pip3 --version

もしpipが見つからない場合は、Pythonのインストール形態によっては追加設定が必要です。まずは「pipが使える状態」を作ってから、Matplotlibの導入に進みます。

pipでMatplotlibをインストールする方法

python matplotlib の導入は、一般的にはpipでインストールします。まずは以下のコマンドでインストールを実行してください(管理者権限が不要な形で入れるには、仮想環境を使う方法もありますが、ここではpipでの基本導入に絞ります)。

pip install matplotlib
# 環境によっては
pip3 install matplotlib

インストール後は、バージョンを確認して「入ったこと」を確実にします。

python -c "import matplotlib; print(matplotlib.__version__)"
# もしくは
python3 -c "import matplotlib; print(matplotlib.__version__)"

ここでエラーが出なければ、Matplotlibは利用可能な状態です。もしエラーになった場合は、主に「実行しているPythonとpipが別の環境を指している」ケースが多いため、同じ環境のpythonpipを使っているかを見直してください。

Jupyter Notebookの導入(pipでのインストール)

Matplotlibはスクリプトでも使えますが、学習・試行錯誤・可視化の確認を効率化するならJupyter Notebookが便利です。ここではpipでNotebookを導入する基本手順を示します。

pip install notebook
# 環境によっては
pip3 install notebook

インストールできたら、起動できるかを確認します。

jupyter notebook

コマンド実行後、ブラウザが起動してファイル一覧(Notebookのホーム画面)が表示されれば準備完了です。もしjupyterコマンドが見つからない場合は、インストール先のPATHが通っていない可能性があります。その場合はいったん同じPython環境で再インストールしているかを確認してください。

Notebook上からMatplotlibをセットアップする方法

Jupyter Notebookでは、Matplotlibを「Notebook内に描画する」設定を行うと、セル実行のたびにグラフがその場に表示され、確認が格段に楽になります。まずは新規Notebookを作成し、先頭付近のセルで次を実行します。

%matplotlib inline

続けて、Matplotlibが読み込めることを確認します。

import matplotlib.pyplot as plt

Notebook上でのセットアップで押さえておきたいポイントは次のとおりです。

  • %matplotlib inline:グラフをNotebook内に埋め込み表示するための定番設定です。
  • import matplotlib.pyplot as plt:以降の描画でよく使うため、慣例的にpltという別名で読み込みます。
  • エラーが出る場合:Notebookが参照しているPython環境にMatplotlibが入っていない可能性があります。同じ環境にインストールできているかを見直します。

ここまで完了すれば、python matplotlib の学習・実装を進めるための「インストールと環境準備」はひと通り整った状態です。

基本の考え方:pyplotとオブジェクト指向(Figure/Axes)

python matplotlibを使い始めると、最初に触れるのがmatplotlib.pyplot(通称pyplot)です。一方で、少し複雑な図(複数のグラフ、細かなレイアウト調整、部品ごとの制御)を作ろうとすると「Figure」「Axes」といったオブジェクト指向(OOP)的な考え方が重要になります。ここでは、pyplotとFigure/Axesの関係を整理し、なぜ両方を理解すると作図が安定するのかを押さえます。

pyplotインターフェースの位置づけと使いどころ

pyplotは、Matplotlibを「手早く描く」ための高レベルAPIです。内部的にはFigureやAxesなどのオブジェクトを生成・保持しながら、ユーザーが少ないコードで描画できるように“状態(カレントのFigure/Axes)”を管理してくれます。

例えば、以下のような書き方はpyplotの典型です。どのAxesに描いているかを明示しなくても、pyplotが「今操作しているAxes」を暗黙的に選んで描画します。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [2, 4, 1])
plt.show()

pyplotが向いている場面は次の通りです。

  • 素早い試行錯誤(データを眺めながらプロットを調整する)
  • 単発の簡単な可視化(1つのグラフをさっと描く)
  • 学習初期の理解(まず「描ける」状態に到達しやすい)

一方で、状態に依存するため、コードが長くなるほど「どのAxesに設定しているのか」が追いづらくなりがちです。特に複数グラフを扱うと、意図しない場所に線や設定が乗るなどのミスが起きやすくなります。そこで次に出てくるのがFigure/Axesを中心に据えたオブジェクト指向の作図です。

FigureとAxesの役割(描画オブジェクトの基礎)

python matplotlibでは、図を構成する主要なオブジェクトとしてFigureAxesを押さえると理解が一気に進みます。

  • Figure:図全体の「キャンバス」。出力される1枚の画像(ウィンドウ/画像ファイル)に相当します。
  • Axes:実際にデータを描く「座標領域」。一般的に“1つのグラフ”と考えると分かりやすい要素です(軸、目盛り、タイトルなどを含む)。

よく混同されがちですが、Axis(単数)は「x軸/y軸そのもの(目盛りやスケール)」を指す別概念です。基本段階ではまず、Figure=全体、Axes=描画エリアの二層構造を理解しておくと、設定の置き場所が整理できます。

オブジェクト指向で扱うメリットは、「どの部品を操作しているか」を変数として明確に持てることです。例えば、タイトルやラベルなどの設定をAxesに対して行うことで、複数のグラフがある場合でも狙った箇所だけを確実に変更できます。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()  # FigureとAxesを明示的に取得
ax.plot([1, 2, 3], [2, 4, 1])

この形に慣れると、可視化が大きくなっても「fig(全体)に関すること」「ax(このグラフ)に関すること」を切り分けて管理できます。結果として、コードの可読性と保守性が上がります。

単一Axesで作る最小プロットの流れ

まずは最も基本となる「単一Axesで1つのグラフを描く」流れを、オブジェクト指向スタイルで押さえます。pyplotは便利ですが、ここではあえてFigure/Axesを明示し、python matplotlibの土台となる手順を理解します。

  1. FigureとAxesを作るplt.subplots()で用意する
  2. Axesに対して描画するax.plot()などを呼ぶ
  3. 表示するplt.show()でレンダリングする
import matplotlib.pyplot as plt

# 1) Figure(全体)とAxes(描画領域)を作成
fig, ax = plt.subplots()

# 2) Axesに対してプロット
ax.plot([1, 2, 3], [2, 4, 1])

# 3) 表示
plt.show()

ここで重要なのは、「描画はAxesに対して行う」という意識です。以降、グラフを増やしたり、設定を追加したりするときも、基本は「対象のAxesを取り出して、そのAxesに命令する」という考え方が軸になります。pyplotはその近道として使える、という位置づけで理解しておくと、Matplotlibの学習がスムーズになります。

まず描いてみる:最初のプロット作成チュートリアル

python+matplotlib+visualization

ここでは、python matplotlibで「とにかく最初の1枚」を描くところから始めます。難しい理屈は後回しにして、最小コードで表示し、次にタイトルや軸ラベル、表示範囲、見た目(色・線種)、凡例、文字列カテゴリの扱いへと段階的に整えていきます。

最小コードで線を描く(はじめの一歩)

最初のゴールは「実行して線が出る」ことです。Matplotlibは慣例的にmatplotlib.pyplotpltとして読み込み、plot()で線を描き、最後にshow()で表示します。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

plt.plot(x, y)
plt.show()

xyは同じ長さの配列(リストなど)にします。これだけで折れ線グラフが作れます。まずはこの動作確認ができればOKです。

タイトル・軸ラベルの追加方法

グラフは「何を示す図か」が一目でわかることが重要です。タイトル、x軸・y軸ラベルは最小限の情報として付ける習慣をつけましょう。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

plt.plot(x, y)
plt.title("Sample Line Plot")
plt.xlabel("x value")
plt.ylabel("y value")
plt.show()

日本語ラベルを使うこと自体は可能ですが、環境によっては日本語フォント設定が必要な場合があります。まずは英数字で動作を固めるとスムーズです。

表示範囲の変更(軸の範囲・スケール調整)

データの一部に注目したいときや、外れ値で全体が見づらいときは表示範囲を調整します。基本はxlim()ylim()です。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

plt.plot(x, y)
plt.xlim(0, 4)
plt.ylim(0, 20)
plt.show()

また、値の桁が大きく差があるデータでは対数スケールが有効です。軸スケールはxscale()yscale()で切り替えられます。

import matplotlib.pyplot as plt

x = [1, 10, 100, 1000]
y = [1, 3, 10, 30]

plt.plot(x, y)
plt.xscale("log")
plt.title("Log Scale Example")
plt.xlabel("x (log)")
plt.ylabel("y")
plt.show()

「見たい構造が潰れている」と感じたら、まず範囲指定かスケール変更を疑うと改善しやすいです。

色・線種などスタイルの基本設定

python matplotlibでは、色・線の太さ・線種・マーカーなどを指定して見分けやすい図にできます。まず押さえたいのはcolorlinestylelinewidthmarkerです。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

plt.plot(
    x, y,
    color="tab:blue",
    linestyle="--",
    linewidth=2,
    marker="o",
    markersize=6
)
plt.title("Styled Line")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

よく使う指定の例は次の通りです。

  • color"tab:blue""red"(16進数)など
  • linestyle"-"(実線)、"--"(破線)、":"(点線)
  • marker"o"(丸)、"s"(四角)、"^"(三角)

見た目の調整はやりすぎると逆に読みにくくなるため、「区別に必要な最小限」を意識すると実務で使いやすいグラフになります。

凡例(legend)の付け方

複数系列を描く場合、凡例(legend)がないと何が何だかわかりません。plot()labelを付け、最後にlegend()を呼ぶのが基本です。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y1 = [0, 1, 4, 9, 16]
y2 = [0, 2, 8, 18, 32]

plt.plot(x, y1, label="y = x^2")
plt.plot(x, y2, label="y = 2x^2")
plt.title("With Legend")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()

凡例の位置はlocで調整できます(例:loc="upper left")。データと重なって見づらいときに便利です。

文字列カテゴリの横軸を扱う方法

曜日や商品名など「文字列カテゴリ」を横軸にしたいケースもよくあります。Matplotlibは文字列のリストをそのままxとして渡せるため、手軽にカテゴリ軸を作れます。

import matplotlib.pyplot as plt

categories = ["Mon", "Tue", "Wed", "Thu", "Fri"]
values = [12, 18, 9, 22, 15]

plt.plot(categories, values, marker="o")
plt.title("Categorical X Axis")
plt.xlabel("Day")
plt.ylabel("Value")
plt.show()

カテゴリが多くラベルが詰まる場合は、横軸ラベルを回転させると読みやすくなります。

import matplotlib.pyplot as plt

categories = ["Product A", "Product B", "Product C", "Product D", "Product E"]
values = [120, 80, 150, 60, 110]

plt.plot(categories, values, marker="o")
plt.xticks(rotation=45, ha="right")
plt.title("Rotate Tick Labels")
plt.xlabel("Product")
plt.ylabel("Sales")
plt.show()

文字列カテゴリは「順序」が重要です。渡したリストの順に並ぶため、意図した並び(例:時系列順、売上順など)になっているかを確認してから描画すると、誤解のないグラフになります。

グラフ種類別の作り方(代表的な可視化)

python+matplotlib+visualization

python matplotlibでは、用途に応じて代表的なグラフを手早く描けます。ここでは「どのグラフを選ぶべきか」と「最小限のコードでどう描くか」をセットで整理します。可視化の目的(推移を見る/比較する/分布を見る/関係性を見る)に合わせて、適切なグラフ種類を選ぶのが読みやすい図を作る近道です。

折れ線グラフ(line plot)

折れ線グラフは、時系列や連続値の「推移」「トレンド」を表すのに最適です。python matplotlibではplt.plot()で作成でき、複数系列も同じAxesに重ねて比較できます。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 4, 6]

plt.plot(x, y, marker="o")
plt.show()
  • 使いどころ:売上の月次推移、温度の変化、学習曲線など
  • ポイント:変化点を強調したい場合はmarkerを付けると読み取りやすい

棒グラフ(bar chart)

棒グラフはカテゴリごとの「量の比較」に向きます。matplotlibでは縦棒はplt.bar()、横棒はplt.barh()を使います。カテゴリ名(文字列)をそのまま軸に渡せるのも便利です。

import matplotlib.pyplot as plt

labels = ["A", "B", "C"]
values = [10, 7, 13]

plt.bar(labels, values)
plt.show()
  • 使いどころ:製品別売上、部署別人数、アンケート結果の集計
  • ポイント:カテゴリ数が多い場合は横棒(barh)が見やすいことが多い

散布図(scatter plot)

散布図は2変数の「関係性」や「ばらつき」を直感的に確認できます。matplotlibではplt.scatter()で作成し、色やサイズを変えることで追加情報(カテゴリや重要度)も表現できます。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2.1, 2.9, 3.2, 4.8, 5.1]

plt.scatter(x, y)
plt.show()
  • 使いどころ:広告費と売上、身長と体重、特徴量同士の関係
  • ポイント:点が重なる場合はalpha(透明度)を下げると密度が読みやすい

ヒストグラム(histogram)

ヒストグラムはデータの「分布」を見る定番です。どの値が多いか、偏りがあるか、外れ値がありそうかを把握できます。python matplotlibではplt.hist()でビン数(bins)を指定して描画します。

import matplotlib.pyplot as plt

data = [1.2, 1.8, 2.0, 2.2, 2.9, 3.1, 3.3, 3.9, 4.2]
plt.hist(data, bins=5)
plt.show()
  • 使いどころ:所要時間の分布、テスト得点の分布、誤差の分布
  • ポイント:binsを変えると見え方が大きく変わるため、目的に合わせて調整する

箱ひげ図(box plot)

箱ひげ図は、分布を「要約」して比較するのに強い可視化です。中央値、四分位範囲、外れ値の有無を一目で確認でき、カテゴリ間のばらつき比較にも向きます。matplotlibではplt.boxplot()を使います。

import matplotlib.pyplot as plt

group1 = [10, 12, 13, 12, 11, 30]
group2 = [8, 9, 10, 9, 11, 12]

plt.boxplot([group1, group2], labels=["G1", "G2"])
plt.show()
  • 使いどころ:店舗別の客単価、機械別の不良率、施策前後の比較
  • ポイント:外れ値が多い場合、データ品質や母集団の混在を疑う手がかりになる

円グラフ(pie chart)

円グラフは構成比(割合)を示すグラフです。matplotlibではplt.pie()で作成できます。ただし、カテゴリ数が多い場合や僅差の比較には不向きなので、用途を選ぶのが重要です。

import matplotlib.pyplot as plt

labels = ["A", "B", "C"]
sizes = [50, 30, 20]

plt.pie(sizes, labels=labels, autopct="%1.1f%%")
plt.show()
  • 使いどころ:全体に占める比率の提示(カテゴリが少数のとき)
  • ポイント:autopctで割合表示を付けると解釈がぶれにくい

ヒートマップ(heatmap)

ヒートマップは、2次元の値を色の濃淡で表現する可視化です。相関行列、曜日×時間帯の混雑度、行列データのパターン把握などに向きます。matplotlib単体ならplt.imshow()(またはmatshow)が基本です。

import matplotlib.pyplot as plt

data = [
    [1, 2, 3],
    [2, 3, 4],
    [3, 4, 5],
]

plt.imshow(data, cmap="viridis")
plt.colorbar()
plt.show()
  • 使いどころ:相関の強弱、マトリクス状データの強度分布、特徴量のパターン可視化
  • ポイント:cmap(カラーマップ)とcolorbarの併用で数値の意味が伝わりやすい

複数グラフの描画:サブプロットとレイアウト設計

matplotlib+subplots+visualization

分析やレポートでは、1つの図に複数のグラフを並べて比較したい場面が多くあります。python matplotlib では「サブプロット(subplot)」や「グリッドレイアウト」を使うことで、複数の可視化を整理して配置できます。このセクションでは、複数グラフを見やすく配置するための基本パターンと、レイアウト設計で押さえるべきポイントをまとめます。

複数プロットを1枚に配置する基本(subplots)

複数グラフの出発点は plt.subplots() です。これは「図全体(Figure)」と「各グラフ領域(Axes)」をまとめて作る関数で、複数プロットを1枚に配置する最も一般的な方法です。

例えば「縦に2つ」「横に3つ」のように行列数を指定すると、Axesが配列として返ってきます。あとは各Axesに対して plotscatter などを呼ぶことで、狙った場所に描画できます。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)

fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(8, 6))

axes[0].plot(x, np.sin(x))
axes[0].set_title("sin")

axes[1].plot(x, np.cos(x), color="orange")
axes[1].set_title("cos")

plt.tight_layout()
plt.show()

ポイントは次の通りです。

  • figsize で全体の見やすさが大きく変わる(小さすぎると文字が詰まる)
  • 返ってくる axes は、1行1列の場合は単体になりやすい(配列前提のコードなら squeeze=False も検討)
  • 最後に tight_layout() を入れると、タイトルやラベルの重なりを軽減しやすい

グリッドレイアウトの活用方法

単純な「均等な行列」だけでなく、「左に大きいグラフ+右に小さいグラフを2段」のような変則配置をしたいこともあります。python matplotlib ではグリッドベースの設計で柔軟に対応できます。

代表的なのが gridspec(GridSpec)によるレイアウトです。行・列の比率や、どのセルを結合して使うかを指定できます。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)
y = np.sin(x)

fig = plt.figure(figsize=(9, 5))
gs = fig.add_gridspec(2, 3)  # 2行×3列のグリッド

ax_main = fig.add_subplot(gs[:, :2])   # 左2列を上下結合(大)
ax_top  = fig.add_subplot(gs[0, 2])    # 右上
ax_bot  = fig.add_subplot(gs[1, 2])    # 右下

ax_main.plot(x, y)
ax_main.set_title("Main")

ax_top.hist(y, bins=20)
ax_top.set_title("Hist")

ax_bot.scatter(x[::10], y[::10])
ax_bot.set_title("Sample")

plt.tight_layout()
plt.show()

グリッドレイアウトを使うメリットは、情報の優先度に合わせて「主役のグラフを大きく」「補助情報を小さく」といった設計ができる点です。複数グラフを並べるだけでなく、読み手の視線誘導まで含めて設計すると、可視化の説得力が上がります。

軸の共有設定(shared axis)

複数グラフを比較する場合、X軸やY軸のスケールがバラバラだと解釈を誤りやすくなります。そこで便利なのが軸共有(shared axis)です。plt.subplots()sharex / sharey を指定すると、複数Axesで軸範囲や目盛りを揃えられます。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)

fig, axes = plt.subplots(2, 1, sharex=True, figsize=(8, 6))

axes[0].plot(x, np.sin(x))
axes[0].set_ylabel("sin")

axes[1].plot(x, np.sin(2*x), color="green")
axes[1].set_ylabel("sin(2x)")
axes[1].set_xlabel("x")

plt.tight_layout()
plt.show()

軸共有の実務的な利点は次の通りです。

  • 比較が直感的になる(同じx位置・同じスケールで見られる)
  • 目盛り表示を間引きやすい(上段のx目盛りを非表示にしても問題が起きにくい)
  • ズームや表示範囲調整を揃えられる(同じ範囲で一括調整)

一方で、系列ごとにスケールが大きく違う場合は共有が逆効果になることもあります。その場合は共有せず、後述の重ね描きや別軸(ただし別軸は解釈が難しくなるため慎重に)など別設計を検討します。

グラフの重ね描き(overlay)の基本

複数グラフを「分けて並べる」のではなく、1つのAxesに重ねて描くのがoverlay(重ね描き)です。同一座標系での比較に強く、python matplotlib では同じAxesに対して複数回プロットするだけで実現できます。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)

fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x, np.sin(x), label="sin")
ax.plot(x, np.cos(x), label="cos", linestyle="--")

ax.set_title("Overlay example")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()

plt.tight_layout()
plt.show()

重ね描きでは「見分けやすさ」が最重要です。次の観点を意識すると読みやすくなります。

  • 線種(実線・破線・点線)や色を明確に変える
  • label を付けて凡例で識別できるようにする
  • 系列数が多い場合は透明度(alpha)を下げて重なりを軽減する

また、overlayは比較に向く一方で、系列が増えるほど情報が密集して読みにくくなります。「重ねた方が良いか」「サブプロットで分けた方が良いか」は、伝えたい結論(差を見せたいのか、個別の形を見せたいのか)から逆算して選ぶのがレイアウト設計のコツです。

見栄えを整える:論文・レポート向けの調整ポイント

python+matplotlib+visualization

python matplotlibでグラフを作ると、まずは「描ける」状態になります。しかし論文・レポート用途では、読み手が迷わず解釈できるかどうかが重要です。ここでは、フォントや余白、目盛り(ticks)といった“体裁の整え方”に絞って、見栄えと可読性を上げる調整ポイントを整理します。

フォント・ラベル・余白の調整で読みやすくする

レポートで頻出する不満は「文字が小さい」「単位がない」「図が詰まっている」です。Matplotlibはデフォルトでも表示できますが、提出物としてはフォントとラベル、余白をセットで整えると一気に読みやすくなります。

  • フォントサイズを一段大きくする:本文の流し読みでも視認できるサイズに揃えるのが基本です。タイトル、軸ラベル、目盛りラベルで階層をつけると、情報の優先度が伝わります。
  • 軸ラベルに単位を明記する:「Time (s)」「Temperature (°C)」のように、変数名+単位をセットにすると、読み手の解釈コストが下がります。
  • 余白(レイアウト)を確保する:タイトルや軸ラベルが図の外に切れる、凡例が重なる、といった事故は余白不足が原因になりがちです。余白を自動調整する設定を使うと安全です。
import matplotlib.pyplot as plt

# フォントとレイアウトの基本調整(例)
plt.rcParams.update({
    "font.size": 12,          # 全体の基準フォント
    "axes.titlesize": 14,     # タイトル
    "axes.labelsize": 12,     # 軸ラベル
    "xtick.labelsize": 11,    # x目盛り
    "ytick.labelsize": 11,    # y目盛り
    "figure.dpi": 120,        # 画面表示の見やすさ(用途により調整)
})

fig, ax = plt.subplots(figsize=(6, 4), constrained_layout=True)  # 余白の自動調整
ax.set_title("Experiment Result")
ax.set_xlabel("Time (s)")
ax.set_ylabel("Voltage (V)")

特にconstrained_layout=Trueは、図中要素の重なりを減らしやすく、論文・レポートの“体裁崩れ”対策として効果的です(要素が多い場合は手動調整が必要になることもあります)。

目盛り(ticks)と軸の間隔・配置を整える

次に効くのが、目盛り(ticks)と軸の配置です。デフォルトの自動配置は便利ですが、読み手にとって「どこを読めばいいか」が曖昧になるケースがあります。目盛りは“読み取りのガイド”なので、間隔・数・表示形式を整えると、グラフの説得力が上がります。

  • 目盛りの数を増やしすぎない:細かすぎるticksは情報量が増える一方で、視線誘導を阻害します。主要目盛り(major ticks)を中心にし、必要なら補助目盛り(minor ticks)を薄く入れるのが定石です。
  • 表示形式(小数点や指数表記)を揃える:桁が揃わないと比較が難しくなります。小数点以下の桁数や指数表記の扱いを統一すると読みやすくなります。
  • ラベルの重なりを回避する:カテゴリ数が多い場合や横長ラベルでは回転(rotation)や配置調整が有効です。
  • 軸の端(余白)を調整する:データ点がプロット領域の端に貼り付くと窮屈に見えます。少し余裕を持たせると視認性が上がります。
import matplotlib.ticker as ticker

# ticksと軸まわりの調整(例)
ax.tick_params(axis="both", which="major", length=6, width=1)
ax.tick_params(axis="both", which="minor", length=3, width=0.8)

# 主要目盛りの間隔を指定(例:xを1刻みに)
ax.xaxis.set_major_locator(ticker.MultipleLocator(1))

# yの表示形式を揃える(例:小数2桁)
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter("%.2f"))

# ラベルが詰まるときの回転
for label in ax.get_xticklabels():
    label.set_rotation(30)
    label.set_ha("right")

# 軸の余白(データの端に余裕を持たせる)
ax.margins(x=0.02, y=0.05)

python matplotlibでは、目盛りを「自動任せ」から「意図した間隔・表記」へ寄せるだけで、読み手が数値を追いやすくなります。特に比較グラフやトレンド評価では、ticksの整備が結果の解釈に直結します。

デフォルト表示と調整後の比較観点

調整作業はやり始めるとキリがありません。そこで「何を基準に直すか」を決めておくと、必要十分な品質で止められます。デフォルト表示と調整後を見比べる際は、次の観点でチェックするのが有効です。

  • 可読性:タイトル・軸ラベル・目盛りの文字が、印刷やPDF表示でも無理なく読めるか。
  • 解釈の一意性:単位の欠落、略語の多用、桁の不統一などにより、読み手が迷わないか。
  • 視線誘導:最初に見せたい情報(傾向・差・ピーク)が自然に目に入るか。ticksが多すぎて散らないか。
  • レイアウトの健全性:ラベルや凡例が欠けていないか、重なっていないか、余白が詰まりすぎていないか。
  • 一貫性:同一レポート内の複数図で、フォントサイズ・表記・ticks間隔が揃っているか(比較しやすさに直結)。

この比較観点を持っておくと、Matplotlibのカスタマイズが「装飾」ではなく「伝達品質の改善」になります。結果として、図だけが浮かない、論文・レポート向けの整った可視化に近づけられます。

出力・保存:表示方法と画像ファイルへの書き出し

python+matplotlib+plot

画面表示(表示コマンドと実行環境の注意点)

python matplotlibで作成したグラフは、まず「画面に表示して確認する」工程が基本です。表示には主にplt.show()を使いますが、実行環境(スクリプト実行か、Notebookか、GUIが使えるか)によって挙動が変わるため、ポイントを押さえておくとトラブルを避けられます。

最もシンプルな表示例は次のとおりです。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [2, 4, 1])
plt.title("Sample")
plt.xlabel("x")
plt.ylabel("y")

plt.show()

plt.show()は「描画ウィンドウを開いて表示する」役割を担います。特にPythonスクリプト(.py)をターミナル等から実行する場合、show()を書かないとウィンドウが表示されない、あるいは表示されてもすぐ閉じてしまうことがあります。

一方で、Jupyter NotebookやJupyterLabなどのノートブック環境では、セルの出力としてインライン表示される設定になっていることが多く、plt.show()が省略できるケースもあります。ただし、環境によっては表示が不安定になることがあるため、再現性を重視するなら明示的にplt.show()を書く運用が無難です。

また、表示ができない(あるいはエラーになる)典型例として、GUIが使えない環境(例:リモートサーバー、コンテナ、CIなど)で実行しているケースがあります。この場合は「画面表示」ではなく「ファイル保存」を前提にし、次のH3で紹介するsavefig()を使うのが基本方針になります。

画面表示で押さえたい注意点をまとめると以下です。

  • plt.show()はスクリプト実行時の表示に必須になりやすい
  • Notebookではインライン表示されることがあるが、明示しておくと挙動が安定しやすい
  • GUIが使えない実行環境では、表示より保存(savefig)を選ぶ

画像ファイルとして保存(解像度・形式の選び方)

作成した図をレポートやWebに載せる場合、python matplotlibではplt.savefig()(またはオブジェクト指向でfig.savefig())で画像ファイルに書き出します。保存は「ファイル形式」「解像度(dpi)」「余白の扱い」を適切に選ぶことで、仕上がりの品質が大きく変わります。

基本的な保存例です。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [2, 4, 1])
plt.title("Sample")

plt.savefig("sample.png", dpi=150, bbox_inches="tight")

重要な引数の意味は次のとおりです。

  • dpi:解像度(dots per inch)。値を上げるほど高精細になり、文字や線がくっきりしますがファイルサイズも増えます。
  • bbox_inches="tight":図の外側の余白を自動調整し、ラベルやタイトルの切れを防ぎつつ、無駄な余白を減らします。

保存形式は用途で選ぶのがコツです。代表的な形式と向いている用途を整理すると次のようになります。

  • PNG:汎用性が高いラスター画像。Web、スライド、ドキュメントへの貼り付けで扱いやすい。
  • JPG(JPEG):写真向きの圧縮形式。図表では輪郭がにじむことがあるため、グラフ用途ではPNGが無難なことが多い。
  • SVG:ベクター形式。拡大しても劣化しにくく、Webやデザインツールでの編集にも向く。
  • PDF:ベクター形式。論文・印刷・レポートで高品質を維持しやすい。

解像度(dpi)の目安は、掲載先に合わせて決めると失敗しにくくなります。

  • 画面表示・Web用途:dpi=100〜200程度を起点に調整
  • 資料・レポート用途:dpi=150〜300程度を検討(文字サイズも併せて確認)

保存時の実務的な注意点として、plt.show()plt.savefig()の順序があります。環境によってはshow()を先に呼ぶと図が閉じられ、空の画像が保存されるなどの問題が起きることがあります。基本は「保存してから表示」、もしくは「保存のみ」に寄せると安定します。

最後に、複数の図を連続生成して保存する場合は、意図しない重ね描きを避けるため、保存後に図を閉じる運用も有効です。

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [2, 4, 1])
plt.savefig("sample.png", dpi=200, bbox_inches="tight")
plt.close()

学習を進めるコツ:練習方法と公式ドキュメントの活用

python+matplotlib+visualization

python matplotlib は「とりあえず描けた」段階から、思い通りの見栄え・構成に近づける段階で学習が止まりやすいライブラリです。効率よく上達するには、やみくもに機能を覚えるのではなく、手を動かす練習課題を設計し、つまずいたら公式ドキュメントを軸に調べる習慣を作るのが近道です。ここでは、練習課題の作り方と、公式リファレンスを使った調べ方を具体化します。

手を動かす練習課題の作り方

練習課題は「何を描くか」よりも、「どんな操作を身につけたいか」を先に決めると継続しやすくなります。python matplotlib の学習では、1回の課題で要素を詰め込みすぎず、再現→改変→拡張の順で難易度を上げる設計が効果的です。

おすすめは、次のように“制約付き”で課題を作る方法です。

  • ゴールを1文で決める:例「同じデータで、見た目の違いが説明できるグラフを作る」
  • 変更するパラメータを3つまでに絞る:例「色・線幅・透明度」だけ触る
  • 成果物の条件を固定する:例「タイトルと軸ラベルは必ず付ける」「凡例は必ず表示」
  • 比較を入れる:Before/After を作り、どこが変わったか言語化する

課題のテンプレート例をいくつか用意しておくと、学習が途切れにくくなります。

  1. 課題A:再現(写経)→最小変更

    サンプルコードや過去に作ったグラフをそのまま再現し、linewidthlinestylealphaなど1〜2点だけ変えて結果の違いを観察します。「変更前と変更後を同じ条件で見比べる」ことが目的です。

  2. 課題B:同じデータを別表現にする

    同一データを折れ線→散布図→棒グラフのように描き分け、何が読み取りやすいかをメモします。python matplotlib は表現手段が多いため、「目的に応じた選択」を練習に組み込むと伸びやすいです。

  3. 課題C:見た目の品質を上げるチェックリスト運用

    毎回同じ観点で改善すると、再現性のあるスキルになります。例えば次の観点で自己レビューします。

    • タイトルは「何の比較か」が分かるか
    • 軸ラベルは単位まで書けているか
    • 目盛りが詰まりすぎていないか
    • 凡例の内容がデータと一致しているか
    • 配色が識別しやすいか(同系色で潰れていないか)
  4. 課題D:エラーからの復旧を“課題化”する

    わざと不整合(配列長の不一致、ラベル数の不足など)を作り、エラーメッセージを読み解いて修正します。「エラーに強くなる」ことは python matplotlib 学習の実務的な近道です。

さらに、課題を“資産化”するために、作ったコードは「入力データ」「狙い(変更点)」「学び(気づき)」の3点をコメントで残すのがおすすめです。後で同じつまずきが出たときに、検索より速く自己解決できるようになります。

つまずきやすいポイントと調べ方(公式リファレンス活用)

python matplotlib でつまずきやすいのは、文法そのものより「どのオブジェクトの、どのメソッド(または引数)を触るべきか」が分からなくなる場面です。そこで、調べ物の起点を“公式ドキュメント”に置くと、断片的な記事よりも正確に到達できます。

まず、つまずきやすいポイントをパターン化しておくと、調査の方向が定まります。

  • 同じ名前の設定が複数の場所にある:例「タイトル」「ラベル」「凡例」など、似た概念が複数APIに分散して混乱する
  • 引数名は分かるが意味が曖昧:例 alphadpibbox_inches などの効果範囲がピンとこない
  • 期待通りに反映されない:設定が上書きされている、適用対象が違う(図全体か軸か)など
  • エラーメッセージが抽象的:配列の形状不一致、型の不適合などが原因で起きる

上記に対して、公式リファレンスを使う調べ方を手順化すると迷いが減ります。

  1. 1) “何のオブジェクト”を操作しているか確認する

    調べる前に、今触っているのが「図(Figure)」「軸(Axes)」「線(Line2D)」「テキスト(Text)」など、どの要素かを一度言葉にします。公式リファレンスはクラス単位で整理されているため、対象オブジェクトが定まると一気に探しやすくなります。

  2. 2) 公式サイト内検索で“引数名”を引く

    「やりたいこと」から探すより、分かっている引数名・メソッド名(例:set_titleset_xlabellegend など)で公式内検索する方が速いです。該当ページに着いたら、Parameters(引数)とNotes(注意点)を必ず読み、既定値と影響範囲を確認します。

    公式ドキュメント:Matplotlib documentation

  3. 3) “最小再現コード”に落として検証する

    反映されない/挙動が分からないときは、データや処理を削って10行程度の最小コードにします。python matplotlib は設定が多層(デフォルト設定、スタイル、個別設定など)になりやすいため、最小化すると原因の切り分けが一気に進みます。

  4. 4) 公式のExamples / Galleryで同型の例を探す

    「自分のケースに近い完成形」を先に見つけ、そこから差分を埋めるのが効率的です。特にレイアウトや注釈、凡例配置などは文章説明より例を見る方が理解が早いことが多いです。

  5. 5) エラーは“全文”を手がかりにする

    エラーの末尾1行だけでなく、例外の種類(例:ValueError など)とメッセージ全文、どの関数で落ちたかを確認します。公式リファレンスで該当関数の引数要件(配列の形、受け付ける型)を確認し、入力データ側の不整合を疑うのが定石です。

最後に、調べた内容をその場限りにしないコツとして、「公式ページURL」「効いた設定(引数名と値)」「注意点(反映条件)」をメモに残しておくと、python matplotlib の学習が“検索型”から“蓄積型”に変わります。結果として、次に同じ課題へ取り組むときのスピードが大きく上がります。

まとめ:Matplotlibを使いこなすための次のステップ

python+matplotlib+visualization

ここまでで、Pythonでグラフを描くための基本ツールであるMatplotlibの全体像が見えてきたはずです。最後に「次に何をすれば、実務で通用する可視化スキルになるのか」を整理します。ポイントは、再現性(同じ結果を何度でも出せる)伝わる設計(見た人が迷わない)を意識して、段階的に引き出しを増やしていくことです。

次のステップとしてまず取り組みたいのは、目的別に「作図の型」を持つことです。たとえば、定点観測の推移なら折れ線、比較なら棒、分布ならヒストグラム…というように、用途に応じた選択がスムーズになると、python matplotlibでの可視化が一気に速くなります。さらに、タイトル・軸ラベル・凡例・目盛りのルールを自分の中で統一すると、毎回の調整コストも下がります。

次に、作図の品質を一段上げるために「見栄えの基準」を言語化しておくのが効果的です。具体的には、次の観点で自分のグラフをチェックできるようにすると、改善点が明確になります。

  • 一目で主張がわかるか(何を伝えるグラフかがタイトルや注釈で明確か)
  • 軸・単位・スケールが適切か(誤解を生まない範囲設定になっているか)
  • 色や線種に意味があるか(装飾ではなく区別として機能しているか)
  • 余白・フォント・目盛りが読みやすいか(閲覧環境が変わっても崩れにくいか)

さらに実務で役立つのが、作図プロセスの「テンプレート化」です。よく使う設定(図のサイズ、フォント、色、保存形式など)を毎回手で直すのではなく、一定の型に寄せていくことで、作図のばらつきが減り、チーム内共有もしやすくなります。Matplotlibは細部まで調整できる反面、都度設定すると迷いやすいので、自分用の定番設定を持つことが上達の近道です。

学びを加速するには、「作りたいグラフを先に決めて、必要な機能だけ調べる」進め方が有効です。万能に覚えようとすると挫折しやすい一方で、業務・研究・学習で実際に必要な図(レポートの定型図、分析結果の比較図など)を題材にすると、Matplotlibの機能が目的に結びついて定着します。特にpython matplotlibは検索情報も豊富なので、キーワード(例:legend位置、ticks調整、savefig 解像度など)を明確にして調べると効率よく前進できます。

最後に、Matplotlibを「使える」から「使いこなせる」へ引き上げるために、次の行動をおすすめします。

  1. 自分の用途でよく使うグラフを3種類選び、同じ体裁で再現できるようにする
  2. 見やすさのチェックリスト(タイトル・軸・単位・色・余白)を作り、毎回確認する
  3. よく使う設定をテンプレートとしてまとめ、次回以降の作図を高速化する

これらを積み上げることで、Matplotlibは単なる描画ライブラリではなく、伝わるアウトプットを安定して作るための強力な武器になります。