Pythonのmatplotlibの棒グラフの色の変更方法を説明します。
matplotlibのドキュメントは こちらです。
棒グラフを描く
デモサイトを真似て、棒グラフを作成します。
import os
from datetime import datetime
import matplotlib.pyplot as plt
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
ax.bar(names, values)
filename = 'graph_bar_' + datetime.today().strftime('%Y%m%d') + '_a.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
棒グラフができます。
色を設定しなければデフォルトの色になります。

棒グラフの色をグラデにする
棒グラフの API 説明を見ると、色は color パラメータで設定する、となっています。
matplotlib.axes.Axes.bar のドキュメントは、 こちら です。
ドキュメント内のこの記述です。 “color: color or list of color, optional. The colors of the bar faces.”
棒グラフのグラデーションのための色のリストを作ります。
色のリストは手動で作ってもいいのですが、カラーマップを使うと楽にできます。
カラーマップのドキュメントは、こちらです。
カラーマップを選んで、その中の位置(0.0~1.0)を指定すると、その色を取得できます。
実装してみます。
plt.get_cmap(カラーマップの指定) でカラーマップを取得できます。
cmap(カラーマップ上の位置) で色を指定できます。
import os
from datetime import datetime
import random
import numpy as np
import matplotlib.pyplot as plt
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
colors = []
interval = 0.2
cmap = plt.get_cmap('Reds') # カラーマップを決める。
for num in np.arange(1, len(names)+1):
position = interval * num # カラーマップ上の位置は 0~1 の範囲で設定する。
colors.append(cmap(position))
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
ax.bar(names, values, color=colors)
filename = 'graph_bar_' + datetime.today().strftime('%Y%m%d') + '_c.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
上記コードを実行した結果です。
指定したカラーマップ(Reds)上の指定した位置の色を設定できています。

カラーマップを “cool” にすると、こうなります。

カラーマップを “autumn” にすると、こうなります。


