棒グラフ 散布図

matplotlibの棒グラフ(色、間隔、ラベルの順序を指定する)

最終更新日 2023.02.18

matplotlib で棒グラフは bar という関数で表します。bar は横軸(データのラベル)と縦軸(データの値)を引数に持ちます。

りんごを売っている人の月曜日から木曜日までの売上を棒グラフにしてみましょう。

from matplotlib import pyplot as plt

name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
value = [54, 67, 89, 103]
plt.bar(name, value)
plt.show()

出力画像

matplotlib で棒グラフを描くまでの手順:

  1. matplotlib をインポートする
  2. 横軸のラベルを配列にする
  3. 縦軸の値を配列にする
  4. matplotlib の bar にラベルと値を入れる
  5. 出力する

棒グラフの横軸に月曜日から木曜日までのラベルがあり、縦軸に各曜日の売上があります。月曜日は 54 個、火曜日は 67 個…と対応しています。

棒の色を変える

デフォルトの色は暗い青です。色を変えたいときは bar のオプション引数に色を加えます。

from matplotlib import pyplot as plt

name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
value = [54, 67, 89, 103]
plt.bar(name, value, color='#ff0000')
plt.show()

棒が赤になりました。ff0000 は赤を意味します。ウェブの色指定と同様、シャープの後に 6 桁の 16 進数を続けて表します。

棒に枠線をつける

グラフに枠線をつけることも可能です。

from matplotlib import pyplot as plt

name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
value = [54, 67, 89, 103]
plt.bar(name, value, color='#effef0', edgecolor='#9ffea0', linewidth=10)
plt.show()

bar の引数に edgecolor と linewidth を入れます。edgecolor は枠線の色、linewidth は枠線の太さを表します。

間隔(隙間)を変える

グラフとグラフの隙間を変えるときは、bar の引数に width を指定します。デフォルトは 0.8 です。まずは 0.5 にして隙間を空けてみます。

from matplotlib import pyplot as plt

name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
value = [54, 67, 89, 103]
plt.bar(name, value, color='#effef0', edgecolor='#9ffea0', linewidth=10, width=0.5)
plt.show()

width を 1 にしてグラフの隙間をつめてみます。

from matplotlib import pyplot as plt

name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
value = [54, 67, 89, 103]
plt.bar(name, value, color='#effef0', edgecolor='#9ffea0', linewidth=10, width=1)
plt.show()

ラベルを並び替える

これまでの棒グラフは月曜日から木曜日まで順番通りに並んでいませんでした。順番を指定するときは bar の最初の引数(これまでのコードでいうと name にあたる変数)を数値の配列にして、ラベルはラベルで label という変数を配列でつくり、オプションの tick_label に指定します。

from matplotlib import pyplot as plt

name = [1, 2, 3, 4]
value = [54, 67, 89, 103]
label = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
plt.bar(name, value, color='#effef0', edgecolor='#9ffea0', linewidth=5, width=0.7, tick_label=label)
plt.show()

bar の引数に tick_label=label が追加されています。name、value、labelの 3 つは紐づいているため、1 は 54 と月曜日、2 は 67 と火曜日…と対応しています。

bar という関数はあくまで最初の引数にもとづいて順序を決めています。ラベルを指定しないで、最初の引数に直接「月曜日から木曜日」までを入れたときに、ラベルが順番通りにならない理由は、bar が内部でラベルをアルファベット順に並び替えてしまうためです。