棒グラフの色を変えたい
棒グラフの色は、デフォルトではなく、オリジナリティを出したいですよね。
やってみましょう。
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" にすると、こうなります。
カラーマップを "autumn" にすると、こうなります。