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” にすると、こうなります。