Python | ファイル・OS 操作:Matplotlib 基本

Python Python
スポンサーリンク

概要(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()
Python

pyplotは“関数を順番に呼ぶ”だけで描けます。まずはこれで感覚を掴みましょう。

オブジェクト指向スタイル(複数図や細かい調整に強い)

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()
Python

axに対して設定するのが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()
Python

sharex/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()
Python

pandas.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で解像度と余白を調整。これらの型を身につければ、初心者でも短く、伝わるグラフを安定して作れるようになります。

タイトルとURLをコピーしました