概要(折れ線・棒の基本と使い分けの軸)
折れ線は「連続した推移」を、棒は「カテゴリ間の比較」を見せるのに向いています。まず「横軸は時間かカテゴリか」を決め、折れ線なら値の変化の形、棒なら差の大きさが即読できるように軸ラベル・グリッド・凡例を整えます。Matplotlibでは、折れ線は plot、縦棒は bar、横棒は barh を使い、タイトル・軸ラベル・レイアウト(tight_layout)までを一連の型にすると迷いません。
使い分けの考え方(連続か、離散か)
折れ線を選ぶ場面
時間の経過や連番のインデックスに対して数値が滑らかに変化する様子を伝えたいとき。ピーク・谷・トレンド・季節性が見やすく、点と線のスタイルで読ませ方を調整できます。
棒グラフを選ぶ場面
製品・部署・地域・月名などの「離散カテゴリ」を比較したいとき。高さの違いが視覚的に直感的で、並列(グループ)や積み上げで構成や差を強調できます。
折れ線グラフの基本と深掘り(推移を“形”で伝える)
最短の折れ線と読みやすさの設定
import matplotlib.pyplot as plt
months = ["1月","2月","3月","4月"]
sales = [100, 120, 90, 130]
plt.plot(months, sales, marker="o", color="#4F81BD")
plt.title("月別売上推移")
plt.xlabel("月"); plt.ylabel("売上(万円)")
plt.grid(True, linestyle=":", alpha=0.6)
plt.tight_layout(); plt.show()
Python推移を見せるので、マーカーや薄いグリッドで「どこが上がり下がりしたか」を即読可能にします。
複数系列と副軸(尺度が違うときの併用)
import matplotlib.pyplot as plt
months = ["1月","2月","3月","4月"]
sales = [100,120,130,90]
profit = [30,25,35,20]
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(months, sales, marker="o", label="売上", color="tab:blue")
ax2.plot(months, profit, marker="s", label="利益", color="tab:red")
ax1.set_xlabel("月"); ax1.set_ylabel("売上(万円)", color="tab:blue")
ax2.set_ylabel("利益(万円)", color="tab:red")
fig.tight_layout(); plt.show()
Pythonスケールが違う指標は副軸で重ねると誤読を防げます。ラベル色を系列に合わせるのがコツです。
欠損や外れ値への配慮
折れ線は欠損で線が途切れることがあります。必要に応じて補完(前値・移動平均)し、外れ値は注記(annotate)や別色で強調して「理由」を示すと信頼性が上がります。
棒グラフの基本と深掘り(比較を“高さ”で伝える)
単純比較(縦棒)と横棒の選択
import matplotlib.pyplot as plt
labels = ["A","B","C","D"]
values = [10, 12, 9, 15]
plt.bar(labels, values, color="tab:blue", alpha=0.9)
plt.title("製品別数量"); plt.ylabel("数量")
plt.grid(True, axis="y", linestyle=":", alpha=0.6) # 縦方向グリッドで読み取り補助
plt.tight_layout(); plt.show()
Python縦棒は数値の読み取りがしやすいです。ラベルが長い・件数が多い場合は横棒(barh)が見やすくなります。
並列(グループ)棒で比較軸を増やす
import matplotlib.pyplot as plt
import numpy as np
labels = ["A","B","C","D"]
this = [10, 12, 9, 15]
last = [8, 11, 13, 14]
x = np.arange(len(labels)); w = 0.4
plt.bar(x - w/2, this, width=w, label="今年")
plt.bar(x + w/2, last, width=w, label="昨年")
plt.xticks(x, labels); plt.ylabel("数量"); plt.legend()
plt.grid(True, axis="y", linestyle=":", alpha=0.6)
plt.tight_layout(); plt.show()
Pythonバーの幅とオフセットを揃え、凡例とグリッドで「どちらが高いか」を一目で伝えます。
積み上げ棒で構成比と合計を同時に
import matplotlib.pyplot as plt
import numpy as np
labels = ["A","B","C"]
m1 = np.array([10,12,9])
m2 = np.array([11,8,13])
plt.bar(labels, m1, label="1月")
plt.bar(labels, m2, bottom=m1, label="2月")
plt.ylabel("数量"); plt.legend()
plt.grid(True, axis="y", linestyle=":", alpha=0.6)
plt.tight_layout(); plt.show()
Python合計と内訳を一度に見せたい時に有効。割合を見せるなら全体で正規化して積み上げるのも手です。
実務の整え方(ラベル・目盛・レイアウト・色)
軸ラベルと単位は必ず明記する
何の値で、どの単位か(万円・件・%など)を軸ラベルへ。タイトルには期間や対象範囲を簡潔に。
目盛とグリッドで“読める”図へ
カテゴリなら目盛ラベルを回転、数値なら薄い縦グリッド。tight_layoutで切れを防ぎ、bbox_inches=”tight”で保存時の余白を確保します。
色とスタイルは一貫性を保つ
企業カラーやテーマに合わせ、折れ線はマーカー+細線、棒は高彩度+白枠(edgecolor=”white”)などで視認性を上げます。複数系列は色の意味を凡例と軸ラベルで結びます。
よくある落とし穴の回避(誤読・重なり・順序)
折れ線でカテゴリを使ってしまう
カテゴリ間の比較なのに折れ線にすると「連続関係」に見えて誤読されます。離散比較は棒に。
棒の順序が“意味のある並び”になっていない
値でソートするか、論理順(例:商品A→B→C)を決めて固定。毎回グラフの順序が変わると比較が難しくなります。
棒が重なって見づらい
並列棒は幅と間隔の調整、凡例の明示、必要なら横棒へ。積み上げは色のコントラストと凡例順序を工夫します。
例題で身につける(定番から実務まで)
例題1:折れ線の基本(推移+グリッド)
import matplotlib.pyplot as plt
months = ["1月","2月","3月","4月"]
sales = [100,120,90,130]
plt.plot(months, sales, marker="o", color="#4F81BD")
plt.title("月別売上推移"); plt.xlabel("月"); plt.ylabel("売上(万円)")
plt.grid(True, linestyle=":", alpha=0.6)
plt.tight_layout(); plt.show()
Python例題2:並列棒で今年・昨年比較
import matplotlib.pyplot as plt
import numpy as np
labels = ["A","B","C","D"]
this = [10, 12, 9, 15]; last = [8, 11, 13, 14]
x = np.arange(len(labels)); w = 0.4
plt.bar(x - w/2, this, width=w, label="今年")
plt.bar(x + w/2, last, width=w, label="昨年")
plt.xticks(x, labels); plt.ylabel("数量"); plt.legend()
plt.grid(True, axis="y", linestyle=":", alpha=0.6)
plt.tight_layout(); plt.show()
Python例題3:積み上げ棒で構成を表示
import matplotlib.pyplot as plt
import numpy as np
labels = ["A","B","C"]
online = np.array([6,7,4]); retail = np.array([5,6,7])
plt.bar(labels, online, label="オンライン")
plt.bar(labels, retail, bottom=online, label="店舗")
plt.ylabel("数量"); plt.legend(); plt.grid(True, axis="y", linestyle=":")
plt.tight_layout(); plt.show()
Python例題4:副軸で折れ線×折れ線の共存
import matplotlib.pyplot as plt
m = ["1月","2月","3月","4月"]
sales = [100,120,130,90]; profit = [30,25,35,20]
fig, ax1 = plt.subplots(); ax2 = ax1.twinx()
ax1.plot(m, sales, marker="o", color="tab:blue")
ax2.plot(m, profit, marker="s", color="tab:red")
ax1.set_xlabel("月"); ax1.set_ylabel("売上(万円)", color="tab:blue")
ax2.set_ylabel("利益(万円)", color="tab:red")
fig.tight_layout(); plt.show()
Pythonまとめ
「連続なら折れ線、離散比較なら棒」という原則に従い、軸ラベル・単位・凡例・グリッドで“読める”図へ整えます。並列・積み上げ・副軸で情報量を増やすときは、色と順序の一貫性で誤読を防ぎます。tight_layoutと適切な図サイズで表示品質を保てば、初心者でも短いコードで、実務で通用する折れ線・棒グラフを安定して作れます。
