Pythonでグラフを「塗りつぶす」には、主に Matplotlib を使います。
ここではグラフの塗りつぶし方法について、基本から応用まで体系的に解説します。
目次
基本的な塗りつぶし:fill_between()
使いどころ
fill_between()
は、2本の線に挟まれた領域を塗りつぶすのに使います。
たとえば「折れ線グラフとx軸の間の領域」など。
使い方の基本構文
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.fill_between(x, y, color='skyblue', alpha=0.4)
plt.legend()
plt.show()
引数の解説
x
: 横軸データy1
: 下側の境界線(通常は曲線)y2
: 上側の境界線(省略可、デフォルトは0)color
: 塗りつぶし色alpha
: 透明度(0.0~1.0)
複数の線の間を塗る
y2 = np.cos(x)
plt.plot(x, y, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.fill_between(x, y, y2, where=(y > y2), color='red', alpha=0.3, label='sin > cos')
plt.fill_between(x, y, y2, where=(y < y2), color='blue', alpha=0.3, label='sin < cos')
plt.legend()
plt.show()
where
の使い方
- 条件に合う場所だけを塗り分けるのがポイント。
- 条件を
numpy
の配列で指定。
グラフの上下を領域ごとに塗る(例:信頼区間)
mean = np.sin(x)
std = 0.2
plt.plot(x, mean, label='mean')
plt.fill_between(x, mean - std, mean + std, color='gray', alpha=0.2, label='±1σ')
plt.legend()
plt.show()
このように、平均 ± 標準偏差の範囲をビジュアル化できます。
条件に応じた色分け(マスク付きの塗りつぶし)
mask = y > 0
plt.plot(x, y, label='sin(x)')
plt.fill_between(x, y, where=mask, color='green', alpha=0.4, label='y > 0')
plt.fill_between(x, y, where=~mask, color='red', alpha=0.4, label='y < 0')
plt.legend()
plt.show()
これは「条件付きで色を変えて塗る」実践的なテクニックです。
極座標グラフで塗りつぶす
theta = np.linspace(0, 2 * np.pi, 100)
r = np.abs(np.sin(5 * theta))
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(theta, r)
ax.fill(theta, r, color='purple', alpha=0.5)
plt.show()
ax.fill()
を使えば、極座標でも綺麗に塗りつぶせます。
fill()
で多角形を塗りつぶす
x = [1, 2, 3, 2]
y = [1, 3, 1, -1]
plt.fill(x, y, color='orange', alpha=0.6)
plt.grid()
plt.show()
fill()
は、任意の形状(ポリゴン)を作って塗るのに使います。
棒グラフやエリアチャート風の表現にも使えます。
カラーマップ(色のグラデーション)との組み合わせ
import matplotlib.cm as cm
y = np.sin(x)
colors = cm.viridis((y - y.min()) / (y.max() - y.min()))
for i in range(len(x) - 1):
plt.fill_between(x[i:i+2], y[i:i+2], color=colors[i], alpha=0.8)
plt.plot(x, y, color='black')
plt.show()
このように colormap
を使って色にグラデーションをつけると、よりインパクトのあるビジュアライゼーションができます。
Seabornとの違い
Seaborn でも fill_between
に類似のことができますが、基本的には内部で matplotlib
を使っています。
Seabornは抽象化されていて、sns.lineplot()
や sns.tsplot()
が CI(信頼区間)
を自動で塗る程度です。
まとめ

メソッド | 目的 | 備考 |
---|---|---|
fill_between() | 線と線の間を塗る | グラフのエリアを明示 |
fill() | 任意の形状を塗る | 多角形や図形を描画 |
ax.fill() (極座標) | 極座標での塗り | polar=True |
alpha | 透明度調整 | 視認性を向上 |
where | 条件付き塗り分け | 状態変化を強調 |
color / cmap | 色やグラデ | 意味付けしやすい |
補足:インタラクティブ表示
Jupyter Notebook などで視覚的に調整したい場合は ipywidgets
や plotly
のようなライブラリと組み合わせると、動的な塗り分けも可能です。
以上、Pythonのグラフの塗りつぶしについてでした。
最後までお読みいただき、ありがとうございました。