pythonのグラフ描画用ライブラリである「matplotlib」で、グラフの色をグラデーションにする方法について紹介します。
本記事では、下記の内容を紹介します。
この記事で分かること
◆グラデーションで使用するカラーマップについて
◆グラフをグラデーションにする方法
- 散布図をグラデーションにする方法
- プロットの線をグラデーションにする方法
- 棒グラフをグラデーションにする方法
- 【参考】カラーマップを使用せずにグラデーションにする方法
matplotlibで、グラフを構成する要素(グラフの枠線、プロットの線、凡例など)の色を変更する方法については、下記の記事で紹介しています。
スポンサーリンク
グラデーションで使用するカラーマップ(colormap)について
matplotlibでグラフの色をグラデーションにするためには、カラーマップを使用すると便利です。
グラフの色をグラデーションにする方法を説明する前に、カラーマップについて紹介します。
カラーマップの種類としては、大きく下記の5つがあります。
- Sequential : 連続
- Diverging : 発散
- Cyclic : 周期
- Qualitative : 定性
- Miscellaneous : その他
それぞれのカラーマップについて、ざっくり順番に紹介していきます。
カラーマップについて詳しく知りたい方は、matplotlibの公式ドキュメントをご確認ください。
Sequential : 連続
Sequentialは、連続的に色の色相や彩度が変化するカラーマップです。
順番を表現したいようなグラフに適しています。
Diverging : 発散
Divergingは、中央で色相などが切り替わるカラーマップです。
中央値に重要なデータがある場合や、正負の方向にどれだけ離れているかを表現したい場合に適しています。
Cyclic : 周期
Cyclicは、端のデータの明度が一致するカラーマップです。
端で値が一周するようなデータに適しています。例えば、風向きや角度などです。
Qualitative : 定性
Qualotativeは、色相がばらばらのカラーマップです
順番や関連性がない情報を表現するのに適しています。例えば、円グラフなど。
Miscellaneous : その他
その他のカラーマップです。
スポンサーリンク
matplotlibで散布図(scatter)をグラデーションにする方法
散布図にカラーマップを適用する方法を紹介します。
散布図グラフを作成するメソッドとして、「matplotlib.pyplot.scatter」が用意されています。
matplotlib.pyplot.scatter の引数の指定方法について、 公式ドキュメント から引用しました。
公式ドキュメント
散布図は、matplotlib.pyplot.scatter の引数 cmap= を指定することで、カラーマップを適用することができます。
以下、散布図にカラーマップを適用するサンプルコードです。
### 散布図をグラデーションにする
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
# 乱数を生成
x = np.random.rand(100)
y = np.random.rand(100)
value = np.random.rand(100)
fig = plt.figure(figsize = (6,4), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
# 散布図を表示
plt.scatter(x, y, s=50, c=value, cmap='Blues')
# カラーバーを表示
plt.colorbar(ticks=np.arange(0, 1, 0.1))
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.scatter(x, y, s=50, c=value, cmap='Blues')
引数 cmap= に、カラーマップの 'Blues 'を指定しています。
> plt.colorbar(ticks=np.arange(0, 1, 0.1))
カラーバーを表示しています。
引数ticksに、0~1までの0.1刻みのリストを渡すことで、0.1刻みのメモリを表示しています。
matplotlibでプロットの線をグラデーションにする方法
プロットの線をグラデーションにする方法を紹介します。
グラフを作成するメソッドとして、「matplotlib.pyplot.plot」が用意されています。
matplotlib.pyplot.plot の引数の指定方法について、 公式ドキュメント から引用しました。
散布図とは異なり、カラーマップは引数に指定できません。
公式ドキュメント
matplotlib.pyplot.plot のグラフをグラデーションにするためには、引数 color= にカラーマップの色を一色ずつ指定します。
なお、上記の引用した文章には、引数としてcolorを指定できないように見えますが、公式ドキュメントを確認するとcolorが指定できる旨の記載があります。
以下、プロットの線をグラデーションにするサンプルコードです。
### プロットの線をグラデーションにする
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
num = 10
x = np.linspace(0, np.pi * 2, 100)
fig = plt.figure(figsize = (6,4), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
for i in range(num):
y = np.sin(x) + i
plt.plot(x, y, linestyle='solid', label=str(i), color=cm.Blues(i/num))
plt.legend(loc=(1,0.29))
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.plot(x, y, linestyle='solid', label=str(i), color=cm.Blues(i/num))
カラーマップに、0~1の範囲で値を指定することで、色を指定することができます。
color=cm.Blues(i/num) とすることで、引数 color= にカラーマップ "Blues" の色を一色ずつ指定しています。
> plt.legend(loc=(1,0.29))
凡例の位置を調整し、表示しています。
凡例の表示方法については、下記の記事で詳しく紹介しています。
スポンサーリンク
matplotlibで棒グラフの色をグラデーションにする方法
棒グラフの色をグラデーションにする方法を紹介します。
棒グラフを作成するメソッドとして、「matplotlib.pyplot.bar」が用意されています。
matplotlib.pyplot.bar の引数の指定方法について、 公式ドキュメント から引用しました。
散布図とは異なり、カラーマップは引数に指定できません。
matplotlib 公式ドキュメント
matplotlib.pyplot.bar のグラフをグラデーションにするためには、引数 color= にカラーマップの色を一色ずつ指定します。
なお、上記の引用した文章には、引数としてcolorを指定できないように見えますが、公式ドキュメントを確認するとcolorが指定できる旨の記載があります。
以下、棒グラフをグラデーションにするサンプルコードです。
### 棒グラフをグラデーションにする
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
num = 10
fig = plt.figure(figsize = (6,4), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
plt.xticks(np.arange(0, num, 1))
for x in range(num):
y = 1
plt.bar(x, y, color=cm.Blues(x/num), align='center')
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.bar(x, y, color=cm.Blues(x/num), align='center')
カラーマップに、0~1の範囲で値を指定することで、色を指定することができます。
color=cm.Blues(x/num) とすることで、引数 color= にカラーマップ "Blues" の色を一色ずつ指定しています。
【参考】カラーマップを使わずに、グラフの色をグラデーションにする方法
参考までに、カラーマップを使用せずに、グラフの色をグラデーションにする方法を紹介します。
引数 color= にRGBのタプルを渡すことで、色を指定できることを利用して、グラフをグラデーションにします。
以下、サンプルコードです。
### カラーマップを使わずに、グラフの色をグラデーションにする
import matplotlib.pyplot as plt
import numpy as np
num = 10
fig = plt.figure(figsize = (6,4), facecolor='lightblue')
plt.xlabel('X')
plt.ylabel('Y')
plt.xticks(np.arange(0, num, 1))
for x in range(num):
y = 1
plt.bar(x, y, align='center', color=(0,0,x/num))
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.bar(x, y, align='center', color=(0,0,x/num))
引数 color= にRGBのタプルを渡すことで、色を指定できます。
Blueの値を変化させることで、棒グラフを青のグラデーションにしています。
スポンサーリンク