matplotlibで棒グラフの色をいろいろ変えたい

TAGS :

棒グラフの色を変えたい

棒グラフの色は、デフォルトではなく、オリジナリティを出したいですよね。
やってみましょう。
matplotlibのドキュメントは こちら です。

まずは、デモサイト を真似て、棒グラフを作成します。

Python

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(カラーマップ上の位置) で色を指定できます。

Python

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" にすると、こうなります。
棒グラフ(カラーマップはcool)

カラーマップを "autumn" にすると、こうなります。
棒グラフ(カラーマップはautumn)