概要(Matplotlibは「データを見える化」するための定番)
MatplotlibはPythonでグラフを描く基本ライブラリです。折れ線・棒・散布・ヒストグラムなどを素早く作れ、細かい見た目の調整も可能です。初心者は「pyplotの最短ルート」と「オブジェクト指向(OO)スタイル」の2つの書き方を覚え、タイトル・軸ラベル・凡例・レイアウト・保存までを一連の型で身につけると、実務でも迷わず使えます。
はじめ方(ここが重要)
インストールと最短の折れ線グラフ
# インストール(必要な場合)
# pip install matplotlib
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [100, 120, 90, 130]
plt.plot(x, y) # 折れ線
plt.title("月別売上")
plt.xlabel("月")
plt.ylabel("売上(万円)")
plt.grid(True)
plt.tight_layout() # 余白自動調整
plt.show()
Pythonpyplotは“関数を順番に呼ぶ”だけで描けます。まずはこれで感覚を掴みましょう。
オブジェクト指向スタイル(複数図や細かい調整に強い)
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 4)) # 図と軸を作る
ax.plot([1,2,3,4], [100,120,90,130], color="#4F81BD", marker="o")
ax.set_title("月別売上")
ax.set_xlabel("月")
ax.set_ylabel("売上(万円)")
ax.grid(True)
fig.tight_layout()
plt.show()
Pythonaxに対して設定するのがOOスタイル。複数サブプロットや複雑な図で読みやすさ・再利用性が上がります。
代表的なグラフ(種類と使いどころ)
棒グラフ・横棒・散布・ヒストグラム
import matplotlib.pyplot as plt
# 棒グラフ
plt.bar(["1月","2月","3月","4月"], [10, 12, 8, 15])
plt.title("商品数"); plt.show()
# 横棒
plt.barh(["A","B","C"], [30, 20, 40]); plt.title("在庫"); plt.show()
# 散布図
x = [1,2,3,4,5]; y = [2,4,2,5,7]
plt.scatter(x, y); plt.title("x-y 関係"); plt.show()
# ヒストグラム
data = [1,2,2,3,3,3,4,5,5,6,7,8,9]
plt.hist(data, bins=5, alpha=0.7); plt.title("スコア分布"); plt.show()
Python「推移」は折れ線、「比較」は棒、「関係性」は散布、「分布」はヒストが基本の選択です。
複数系列・副軸・積み上げ
import matplotlib.pyplot as plt
months = ["1月","2月","3月","4月"]
sales = [100,120,130,90]
costs = [70,80,85,75]
# 同一軸に複数系列
plt.plot(months, sales, label="売上")
plt.plot(months, costs, label="費用")
plt.legend(); plt.show()
# 副軸(右側)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(months, sales, color="tab:blue"); ax1.set_ylabel("売上")
ax2.plot(months, costs, color="tab:red"); ax2.set_ylabel("費用")
plt.title("売上と費用(副軸)"); plt.show()
# 積み上げ棒
import numpy as np
vals = np.array([[10,12,9],[11,8,13]]).T # 3製品×2ヶ月
plt.bar(["A","B","C"], vals[:,0], label="1月")
plt.bar(["A","B","C"], vals[:,1], bottom=vals[:,0], label="2月")
plt.legend(); plt.title("製品別・月別構成"); plt.show()
Python副軸はスケールが違う指標を同じ図で見たい時に便利です。
ラベル・凡例・スタイル・レイアウト(見やすさの要点)
タイトル・軸ラベル・凡例・色や線の指定
import matplotlib.pyplot as plt
x = [1,2,3,4]; y = [100,120,90,130]
plt.plot(x, y, color="#4F81BD", linestyle="--", marker="o", label="売上")
plt.title("月別売上"); plt.xlabel("月"); plt.ylabel("売上(万円)")
plt.legend(loc="best")
plt.grid(True, linestyle=":", alpha=0.6)
plt.tight_layout()
plt.show()
Python色・線・マーカーはわかりやすさに直結します。凡例は必ず付けて意味を明確に。
サブプロット配置と共有軸
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(6,6), sharex=True)
axes[0].plot([1,2,3,4],[100,120,90,130]); axes[0].set_title("売上")
axes[1].plot([1,2,3,4],[30,25,35,20]); axes[1].set_title("利益")
for ax in axes: ax.grid(True)
fig.tight_layout(); plt.show()
Pythonsharex/shareyで目盛りを揃えると比較が楽になります。
日本語フォントの設定と余白調整
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "DejaVu Sans" # 実環境の日本語フォントに変更推奨
plt.plot([1,2,3],[10,20,15]); plt.title("日本語タイトル")
plt.tight_layout(); plt.show()
Python日本語が豆腐になる場合はフォント設定を最初に行います。tight_layoutは凡例や長いラベルで必須級。
実務の型(保存・解像度・pandas連携)
画像保存(レポート出力)
import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[100,120,90,130])
plt.title("月別売上")
plt.savefig("sales.png", dpi=150, bbox_inches="tight") # 解像度・余白
plt.close() # スクリプトで大量生成する場合はクローズ
Python保存はsavefig。dpiで解像度、bbox_inches=”tight”で余白を詰めます。
pandasのplotとの組み合わせ
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"月":["1月","2月","3月","4月"], "売上":[100,120,130,90]})
ax = df.plot(x="月", y="売上", kind="line") # pandas側で骨を作る
ax.set_title("月別売上"); ax.set_ylabel("売上(万円)"); ax.grid(True)
plt.tight_layout(); plt.show()
Pythonpandas.plotで素早く作り、Matplotlibで仕上げるのが実務の最短ルートです。
よくある落とし穴の回避(表示・重なり・スケール)
グラフが表示されない・重なる
- 複数図を描くスクリプトでは都度plt.show()、不要ならplt.close()で締める。
- Jupyterでは最後の行が図でも自動表示されるが、明示的にplt.show()を使うと安定。
目盛りやラベルが重なる
- plt.tight_layout()で自動調整。長いカテゴリならplt.xticks(rotation=45)で回転。
スケールが合わず比較しづらい
- 副軸(twinx)を使うか、normalize/標準化して同一軸に載せる。
- 軸範囲はax.set_xlim/ax.set_ylimで明示。
例題で身につける(定番から一歩先まで)
例題1:棒グラフ+凡例+保存
import matplotlib.pyplot as plt
labels = ["A","B","C","D"]
val1 = [10,12,9,15]
val2 = [8,11,13,14]
x = range(len(labels))
plt.bar(x, val1, width=0.4, label="今年")
plt.bar([i+0.4 for i in x], val2, width=0.4, label="昨年")
plt.xticks(x, labels)
plt.title("製品別比較"); plt.ylabel("数量")
plt.legend(); plt.grid(True, axis="y", linestyle=":")
plt.tight_layout(); plt.savefig("compare.png", dpi=150)
plt.show()
Python例題2:散布図+回帰ライン風の重ね描き
import matplotlib.pyplot as plt
x = [1,2,3,4,5]; y = [2,4,2,5,7]
plt.scatter(x, y, color="tab:blue", label="データ")
plt.plot(x, [2.2,2.8,3.4,4.0,4.6], color="tab:red", label="参考ライン")
plt.title("散布図+ライン"); plt.xlabel("x"); plt.ylabel("y")
plt.legend(); plt.grid(True); plt.tight_layout(); plt.show()
Python例題3:サブプロットで別指標を同時比較
import matplotlib.pyplot as plt
months = ["1月","2月","3月","4月"]
sales = [100,120,130,90]
profit = [30,25,35,20]
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6,6), sharex=True)
ax1.plot(months, sales, marker="o"); ax1.set_title("売上"); ax1.grid(True)
ax2.bar(months, profit); ax2.set_title("利益"); ax2.grid(True)
fig.tight_layout(); plt.show()
Python例題4:ヒストグラムの見やすい設定
import matplotlib.pyplot as plt
import numpy as np
data = np.random.normal(loc=100, scale=15, size=300)
plt.hist(data, bins=20, edgecolor="white", alpha=0.8)
plt.title("スコア分布"); plt.xlabel("スコア"); plt.ylabel("頻度")
plt.grid(True, axis="y", linestyle=":")
plt.tight_layout(); plt.show()
Pythonまとめ
Matplotlibは「pyplotで素早く」「OOスタイルで整理して」描くのが基本です。種類は折れ線・棒・散布・ヒストを軸に、タイトル・軸ラベル・凡例・グリッド・色や線で見やすさを整える。複数系列や副軸、サブプロットで情報を整理し、tight_layoutとフォント設定で表示の品質を担保。保存はsavefigで解像度と余白を調整。これらの型を身につければ、初心者でも短く、伝わるグラフを安定して作れるようになります。
