📊Pythonでグラフを描こう!matplotlibの使い方を初心者向けに徹底解説

📈 コード1本で、データが"見える"ようになる

Excelでいちいちグラフを作る手間がなくなり、Pythonのコードを実行した瞬間に折れ線グラフ・棒グラフ・散布図が画面に現れる——matplotlibを使いこなせば、データ分析・研究・業務レポートのあらゆる場面で、数字を一瞬でビジュアル化できます。

📌 matplotlibの基本用語を押さえよう

グラフを描き始める前に、matplotlibの構造を理解しておくとコードが格段に読みやすくなります。全部を暗記する必要はなく、「こういうパーツがあるんだな」と知っておくだけで十分です。

  • 🖼️ Figure(フィギュア):グラフ全体のキャンバス。複数のAxesを含むことができる
  • 📐 Axes(アクセス):X軸・Y軸で囲まれた個々のグラフ描画エリア
  • 📏 軸ラベル(Axis Label):X軸・Y軸それぞれに付けるテキスト説明
  • 🏷️ タイトル(Title):グラフ上部に表示する見出し
  • 📖 凡例(Legend):複数のグラフが何を表しているかを示す説明欄
  • 🔖 目盛り(Ticks):軸上に表示される数値の刻み
  • 🔴 マーカー(Marker):折れ線グラフの各データポイントに付けるシンボル

🛠️ インストールとJupyter Notebookの準備

matplotlibはpipでインストールできます。Jupyter Notebookと組み合わせるとグラフをノートブック内にインライン表示でき、試行錯誤がしやすくなります。

pip install matplotlib
pip install notebook

Jupyter Notebookを起動してノートブックを新規作成したら、最初のセルで以下の2行を実行しておきます。

import matplotlib.pyplot as plt
import japanize_matplotlib  # 日本語フォント対応(pip install japanize-matplotlib)

Shift + Enter でセルを実行できます。japanize_matplotlib をインポートしておくことで、グラフ内の日本語テキストが文字化けなく表示されます。

💻 FigureとAxesを作成する

plt.subplots() を呼び出すと、FigureオブジェクトとAxesオブジェクトが同時に返ってきます。Axesオブジェクトを使ってグラフを描いていくのが基本の流れです。

fig, ax = plt.subplots(facecolor="white")
# facecolor="white" でキャンバスの背景を白に設定

📉 折れ線グラフを描く(plot)

axオブジェクトの plot() メソッドを使います。第1引数にX軸の値リスト、第2引数にY軸の値リストを指定します。

days = ["月", "火", "水", "木", "金", "土", "日"]
max_temp = [19, 22, 24, 21, 22, 12, 20]  # 最高気温

ax.plot(days, max_temp, label="最高気温", marker="o")

# 軸ラベル・タイトル・凡例の設定
ax.set_xlabel("曜日")
ax.set_ylabel("気温(℃)")
ax.set_title("1週間の気温変化")
ax.legend()

plt.show()

🔗 グラフを重ねて描く

同じAxesオブジェクトに対して plot() を複数回呼び出すだけで、グラフを重ねて描けます。それぞれに label を設定し、最後に ax.legend() を呼び出すと凡例が表示されます。

min_temp = [10, 13, 13, 12, 11, 8, 9]  # 最低気温
ax.plot(days, max_temp, label="最高気温", marker="o")
ax.plot(days, min_temp, label="最低気温", marker="s")
ax.legend()

📐 Y軸の目盛りをカスタマイズする(set_yticks)

Y軸の目盛りを任意の値リストに変更したいときは set_yticks() を使います。

import numpy as np
ax.set_yticks(range(0, 31, 5))  # 0〜30を5刻みで設定

📊 棒グラフを描く(bar)

ax.bar() でシンプルな棒グラフが作れます。

subjects = ["国語", "算数", "理科", "社会", "英語"]
scores   = [85, 72, 90, 68, 78]

fig, ax = plt.subplots(facecolor="white")
ax.bar(subjects, scores)
ax.set_xlabel("科目")
ax.set_ylabel("点数")
ax.set_title("テスト結果")
plt.show()

🥧 円グラフを描く(pie)

ax.pie() で円グラフが作れます。labels で各要素の名前を、autopct でパーセンテージの表示形式を指定します。

sizes  = [40, 30, 20, 10]
labels = ["Python", "JavaScript", "Java", "その他"]

fig, ax = plt.subplots(facecolor="white")
ax.pie(sizes, labels=labels, autopct="%1.1f%%")
ax.set_title("プログラミング言語シェア")
plt.show()

🔵 散布図を描く(scatter)

2つの変数の関係を視覚化するには ax.scatter() を使います。X軸・Y軸にそれぞれ別の数値リストを渡します。

height = [120, 122, 118, 125, 130]  # 身長(cm)
weight = [21,  23,  22,  24,  28]   # 体重(kg)

fig, ax = plt.subplots(facecolor="white")
ax.scatter(height, weight)
ax.set_xlabel("身長(cm)")
ax.set_ylabel("体重(kg)", rotation="horizontal", labelpad=40)
ax.set_title("身長・体重の散布図")
plt.show()

📶 ヒストグラムを描く(hist)

データの分布を確認するにはヒストグラムが便利です。ax.hist() にデータのリストを渡すだけで描画できます。bins でバーの数(階級数)を指定できます。

import random
data = [random.gauss(50, 10) for _ in range(1000)]

fig, ax = plt.subplots(facecolor="white")
ax.hist(data, bins=30)
ax.set_xlabel("値")
ax.set_ylabel("頻度")
ax.set_title("データ分布(ヒストグラム)")
plt.show()

✅ よく使うメソッド・引数チートシート

  • 🔹 plt.subplots():FigureとAxesを同時に作成
  • 🔹 ax.plot(x, y):折れ線グラフ
  • 🔹 ax.bar(x, y):棒グラフ
  • 🔹 ax.pie(sizes):円グラフ
  • 🔹 ax.scatter(x, y):散布図
  • 🔹 ax.hist(data, bins=N):ヒストグラム
  • 🔹 ax.set_xlabel / set_ylabel:軸ラベルの設定
  • 🔹 ax.set_title("タイトル"):グラフタイトルの設定
  • 🔹 ax.legend():凡例の表示(label引数と組み合わせる)
  • 🔹 ax.set_yticks(リスト):Y軸目盛りのカスタマイズ
  • 🔹 marker="o" / "s" / "^":折れ線グラフのマーカー形状を指定

🖥️ 快適な開発環境を整えるおすすめアイテム

データ可視化は「描いて → 確認して → 修正する」の繰り返しです。大きなモニターと使いやすいキーボードがあると、作業効率が大幅にアップします🚀

❓ よくある質問 FAQ

🤔 Q1. グラフに日本語を表示すると文字化けします。どうすれば直りますか?

japanize-matplotlib ライブラリを使うのが最も手軽です。pip install japanize-matplotlib でインストールし、スクリプトの冒頭に import japanize_matplotlib を追記するだけで日本語フォントが自動設定されます。

🤔 Q2. FigureとAxesの違いがよくわかりません。

Figure は「額縁(キャンバス全体)」、Axes は「その中に貼られた1枚の絵(グラフ描画エリア)」のイメージです。plt.subplots() を使えば両方を一度に作れるので、まずは fig, ax = plt.subplots() の形を覚えておけば十分です。

🤔 Q3. 1つのFigureに複数のグラフを並べて表示するには?

plt.subplots(行数, 列数) で複数のAxesを作れます。例えば fig, axes = plt.subplots(1, 2) と書くと横に2つのグラフエリアが並び、axes[0]axes[1] でそれぞれを個別に操作できます。

🤔 Q4. グラフを画像ファイルとして保存するには?

plt.show() の代わりに(または前に)plt.savefig("graph.png") を呼び出すと、PNG形式でファイルに保存できます。dpi=300 を指定すると高解像度で出力できます。

🤔 Q5. 折れ線グラフと棒グラフを同じAxesに重ねることはできますか?

できます。同じ ax オブジェクトに対して ax.plot()ax.bar() をそれぞれ呼び出すだけです。気温の折れ線と降水量の棒グラフを重ねるような複合グラフも作れます。

🎯 まとめ

matplotlibの基本の流れは「plt.subplots() でキャンバスを作成 → ax.plot/bar/pie/scatter/hist() でグラフを描画 → ラベル・タイトル・凡例を設定 → plt.show() で表示」の4ステップです。グラフの種類を変えても構造は同じなので、一度マスターすれば応用が利きます。データを「見える化」することで、数字だけでは気づけなかった傾向や異常値がくっきり浮かび上がります。ぜひ自分のデータを使って試してみてください📊✨

あざらし

はじめまして、あざらしです。 フリーターからエンジニア会社へ就職し、 現在はフリーランスのシステムエンジニアとして働いています。 本業のエンジニア業のかたわら、 ✍️ ブログ運営 と「収入の柱を増やす挑戦」を少しずつ続けています。 フリーター時代から比べると、 段階的に収入が増えていくのを実感できるのが素直にうれしい今日この頃。 このブログでは、日々の気づき・体験談 IT・ガジェット・ゲーム系の話 「調べて分かったこと」を噛み砕いた解説 などを中心に、ジャンルに縛られない雑記ブログとして発信しています。 「自分と同じように悩んでいる人のヒントになればいいな」 そんな気持ちで更新中です。 👉 プロフィール詳細は、名前「あざらし」をクリックしてください