Matplotlib
でグラフを描くと、デフォルトで青→オレンジ→緑→…と色が変わっていきます。
自動で色が変わっていくのは、便利なのですが次のような疑問を持つことも・・。
- データが10系列以上あると、また青に戻っちゃうんだけどどうすればいいの?
- この色のサイクルを変更する方法は?
この記事では、Matplotlib
のデフォルトの色(カラーサイクル)の変更について紹介していきます。
そもそもデフォルトの色とは?
Matplotlib
で複数系列のグラフを描くと、青→オレンジ→緑→…と自動で色が変化していきます。
この色の順番のことを、「カラーサイクル」と呼びます。
カラーサイクルは、次のようにアクセスできます。
import matplotlib.pyplot as plt
plt.rcParams["axes.prop_cycle"]
# cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
16進数カラーコードが、cycler
というオブジェクトに格納されていますね。
デフォルトのカラーサイクルの色は、"tab10"
というカラーマップをもとに作成されています。
まずはデフォルトのカラーサイクルの色について再確認してみましょう。
デフォルトのカラーサイクル
デフォルトのカラーサイクルは、"tab10"
というカラーマップです。
- カラーマップ:
Matplotlib
で予め用意された色の組み合わせ
まずはデフォルトのカラーサイクル"tab10"
の10色を確認してみましょう。
n = 10
for i in range(n):
x = (i, i+1)
y = (i, i)
plt.plot(x, y, "o-", label=i)
plt.legend()
次のようにデフォルトのカラーサイクルでグラフが描かれます。
系列数が10個を超えると、また青色に戻って色のサイクルが繰り返されます。
n = 20
for i in range(n):
x = (i, i+1)
y = (i, i)
plt.plot(x, y, "o-", label=i)
plt.vlines(n/2, 0, 20, "gray", "--")
plt.legend(ncol=2)
次のように11系列目で、また青に戻ってしまいます。
- 【参考】
plt.pyplot()
について、使い方をもっと詳しく知りたい方は次の記事を参考にしてください。

また、Jupyter Notebookでは、plt.get_cmap("カラーマップ名")
で、カラーマップを確認できます。
- 【参考】グラフのカラーサイクルではなく、グラフ毎に個別で色を設定したい場合は、次の記事を参考にしてください。

デフォルトの色を使用するには?
デフォルトの各色は、通常の青、オレンジ、緑…とは異なり、やや淡い色合いです。
Matplotlib
では、これらの色を通常の色と区別するために、"tab:色名"
としています。
デフォルト色 | Matplotlibの色名 | 16進数カラーコード |
---|---|---|
青 | tab:blue | #1f77b4 |
オレンジ | tab:orange | #ff7f0e |
緑 | tab:green | #2ca02c |
赤 | tab:red | #d62728 |
紫 | tab:purple | #9467bd |
茶 | tab:brown | #8c564b |
ピンク | tab:pink | #e377c2 |
グレー | tab:gray | #7f7f7f |
オリーブ | tab:olive | #bcbd22 |
シアン | tab:cyan | #17becf |
デフォルトと同じ色を指定したいときは、上表のように"tab:色名"
と入力しましょう。
グラフ毎に個別で色を設定したい場合は、次の記事を参考にしてください。

カラーサイクルの変更
plt.rcParams["axes.prop_cycle"]
を変更することで、カラーサイクルを変更できます。
カラーサイクルの設定には主に次の3つの方法があります。
- 離散型カラーマップを使用
- 連続型カラーマップを使用
- 自分でカラーサイクルを指定
それぞれの設定方法を確認していきましょう。
離散型カラーマップを使用
Matplotlib
で用意されている離散型カラーマップで、カラーサイクルを変更する方法です。
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", plt.get_cmap("カラーマップ名").colors)
離散型のカラーマップには、次の種類があります。
qualitative_colormaps = ['Pastel1', 'Pastel2', 'Paired',
'Accent', 'Dark2',
'Set1', 'Set2', 'Set3',
'tab10', 'tab20', 'tab20b','tab20c']
for cmap_num, cmap_name in enumerate(qualitative_colormaps):
cm = plt.get_cmap(cmap_name)
for i in range(cm.N):
plt.barh(cmap_num, 1, color=cm(i),linewidth=5, left=i)
plt.xticks([])
plt.yticks(range(len(qualitative_colormaps)), qualitative_colormaps)
横棒グラフを利用して一覧出力しています。
- 【参考】棒グラフの作成方法については、次の記事を参考にしてください。

例として、カラーサイクルに"Set1"
のカラーマップを適用してみます。
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", plt.get_cmap("Set1").colors)
n = 9
for i in range(n):
x = (i, i+1)
y = (i, i)
plt.plot(x, y, "o-", label=i)
plt.legend()
次のようにカラーサイクルが変更されています。
同じ要領で他のカラーサイクルを適用することも可能です。
個人的には、特に便利な離散型カラーマップは"tab20"
です。
デフォルトの"tab10"
ではデータの系列が10個を超えると、色が一巡してしまいます。
"tab20"
を指定すれば、データ系列が20個まで対応できます。
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", plt.get_cmap("tab20").colors)
n = 20
for i in range(n):
x = (i, i+1)
y = (i, i)
plt.plot(x, y, "o-", label=i)
plt.legend(ncol=2)
"tab10"
と同じような色合いですが、20系列まで色が循環しません。
20系列以上の場合は、連続型のカラーマップを使用する手もあります。
- 【参考】凡例の設定方法については、次の記事を参考にしてください。

連続型のカラーマップを使用
連続的に色が変化するカラーマップを適用する場合には、次のように設定します。
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", plt.get_cmap("カラーマップ名")(np.linspace(0,1,n)))
連続型の場合は、自分でカラーマップをデータ系列数n
に分割する必要があるため、np.linspace()
を使用しています。
連続型のカラーマップの一部を以下で紹介します。
import numpy as np
sequential_colormaps1 = ['Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds',
'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu',
'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']
sequential_colormaps2 = ['gray', 'bone','pink', 'spring', 'summer', 'autumn', 'winter',
'cool', 'Wistia', 'hot', 'afmhot', 'gist_heat', 'copper']
# サブプロットの準備
fig, axes = plt.subplots(1,2, tight_layout=True)
# 棒グラフの位置調整用, x, dx
xs, dx = np.linspace(0,1,retstep=True)
# 横棒グラフにカラーマップを適用して可視化
for ax, sequential_colormaps in zip(axes, [sequential_colormaps1, sequential_colormaps2]):
for cmap_num, cmap_name in enumerate(sequential_colormaps):
cm = plt.get_cmap(cmap_name)
for x in xs:
ax.barh(cmap_num, dx, color=cm(x),linewidth=5, left=x)
# 横軸ラベル削除、縦軸ラベルにカラーマップ名表示
ax.set_xticks([])
ax.set_yticks(range(len(sequential_colormaps)), sequential_colormaps)
ここでも棒グラフを応用して、可視化しています。
- 【参考】
plt.subplots()
を使用したグラフ作成方法(オブジェクト指向)は、次の記事で詳しく解説しています。

例として、カラーサイクルに"cool"
のカラーマップを適用してみます。
n=9
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", plt.get_cmap("cool")(np.linspace(0,1,n)))
for i in range(n):
x = (i, i+1)
y = (i, i)
plt.plot(x, y, "o-", label=i)
plt.legend()
次のようにカラーサイクルが変更されます。
同じ要領で他のカラーマップを適用することも可能です。
その他のカラーマップは、公式ドキュメントを参照してください。
自分でカラーサイクルを指定
既存のカラーマップを使用せずに、自分で色を直接指定する方法です。
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", ["色名など"のリスト])
[赤、青、緑、オレンジ、紫]
の順番のカラーサイクルを適用してみましょう。
plt.rcParams["axes.prop_cycle"] = plt.cycler("color", ["red", "blue", "green", "orange", "purple"])
n = 10
for i in range(n):
x = (i, i+1)
y = (i, i)
plt.plot(x, y, "o-", label=i)
plt.legend()
次のようにカラーサイクルが変更されます。
オススメ|matplotlibとデータ分析の勉強方法
今回は、Matplotlib
のデフォルトの色変更について基本的なものを解説しました。
Matplotlib
は奥の深いモジュールですが、なかなかわかりにくい部分もあります…。
そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。

また、データ分析初心者の方にはこちらの記事もおススメです。
私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。
何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。