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クラスを適切な位置に描画することで、棒グラフに見せることはできます。
参考
- [関連記事] matplotlib FAQ
- [関連記事] 棒グラフの様々な描き方 [matplotlib]
- [関連記事] 棒グラフを透過色・透明色にする方法 [matplotlib]
- [関連記事] 棒グラフの色を条件によって変える3つの方法 [matplotlib]