Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

matplotlib: 棒グラフでハッチパターンを使う

やりたいこと

論文など、白黒印刷が想定される紙媒体や、色の見え方の個人差に考慮したメディアでの棒グラフの作り方として、ハッチパターンを使ったものがよく使われています。

今回は、matplotlib でハッチパターンの棒グラフを描画してみます。

解決方法

f:id:Kurene:20191024020339p:plain
図:ハッチパターンを適用した棒グラフ

plt.bar() の引数 hatch に文字列を渡すことでハッチパターンを使うことができます。

基本的に、patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ] の10種類あります。

また、"/////" とすることで、ハッチの細かさを変更できます。Pythonでは、例えば "///""/"*3 と書くことができるため、下記のコードではそれを利用しています。

なお、下の例では背景色を指定していませんが、plt.bar() の引数 color で背景色を指定することでハッチパターンと合わせて塗りつぶすことが可能です。

import numpy as np
import matplotlib.pyplot as plt
from adjustText import adjust_text

np.random.seed(47)
patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ]

# プロットに使ったコード
plt.clf()
count = 0
for i in range(0, 3):
    for j in range(0, 3):
        count += 1
        plt.subplot(3, 3, count)
        for k in range(0, len(patterns)):
            value = np.random.randint(5)+5
            plt.bar(k, value, color="white", edgecolor='black', 
                    hatch=patterns[k]*count)
        plt.title(f"patterns[k] * {count}")
plt.tight_layout()
plt.show()

参考

stackoverflow.com

pythonmatplotlibtips.blogspot.com