棒グラフの色をグラデーションにする方法 [matplotlib]

matplotlibの棒グラフで、棒の色をグラデーションにする方法を紹介します。

横グラデーションにする(棒ごとに色を変える)

棒ごとに色を変えてグラデーションにするには、色をrgbで指定すると簡単です。

import numpy as np
import matplotlib.pyplot as plt

n = 10
X = np.arange(n) 
Y = np.random.uniform(1, 10, n)
color = []
for i in range(n):
  color.append((1.0 - i/n, 0, i/n))

fig, ax = plt.subplots()
ax.bar(X, Y, color=color)

fig.show()

棒の長さ・値によってグラデーションする

colormapなどを使って、値の大きさに合わせて色を変えるには、次のようにします。

  • color = ScalarMappable(cmap=’jet’).to_rgba(height)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm

X = np.arange(30) 
Y = np.random.uniform(0, 10, 30)
sm = matplotlib.cm.ScalarMappable(cmap='jet') #colormapを指定

fig, ax = plt.subplots()
ax.bar(X, Y, color=sm.to_rgba(Y))
fig.colorbar(sm) #右端のカラーバーを表示

fig.show()

1本の棒の中でグラデーションにする

1本の棒を、グラデーションに塗る方法は、Axes.barクラスではサポートされていません。

グラデーションに塗ったrectangleクラスを適切な位置に描画することで、棒グラフに見せることはできます。

参考