matplotlibで棒グラフを作成するPythonスクリプトを紹介します。このスクリプトには棒グラフに関係する設定項目を全て詰め込みました。
目次
スクリプト全文
import matplotlib.pyplot as plt import japanize_matplotlib def generate_bar_plot_sample(): """ matplotlibで棒グラフを生成するサンプル。 備忘録として、主要な設定項目を全て活用する。 pyplotではなくAxesを使用する。 """ # 可視化するデータのサンプル # 品目 items = [ "りんご", "みかん", "バナナ", "キウイ" ] # 売上 sales = [ 234, 412, 298, 89 ] # 棒の色 colors = [ "#EE3300FF", "#FF9000FF", "#EECC00FF", "#00DD33FF" ] # FigureおよびAxesの生成 fig, ax = plt.subplots( facecolor="#FFFFFFFF", # 背景色 figsize=(8, 8), # 画像のサイズ ) # 描画 rects = ax.bar( x=items, # 棒のラベルのリスト height=sales, # 棒の高さのリスト width=0.5, # 棒の太さ(デフォルト0.8) align="center", # 目盛ラベルと棒の横位置 color=colors, # 棒の色 linewidth=0, # 棒の枠線の太さ edgecolor="#000000FF" # 棒の枠線の色(太さ0では無関係) ) # 棒の上に値を書き込み for rect in rects: height = rect.get_height() ax.annotate( text=height, # 書き込む値 xy=(rect.get_x() + rect.get_width() / 2, height), # 位置 xytext=(0, 3), textcoords="offset points", ha='center', va='bottom', fontsize=10, # フォントサイズ color="#505050FF", # 文字色 ) # グラフ領域の背景色を設定 ax.set_facecolor( color="#F0F0F0FF", # 背景色 ) # グラフのタイトルを設定 ax.set_title( label="2022年1月の果物の売上", # 文字列 fontsize=20, # フォントサイズ color="#505050FF", # 文字色 ) # 横軸のラベルを設定 ax.set_xlabel( xlabel="品目", # 横軸の文字列 fontsize=14, # フォントサイズ color="#505050FF", # 文字色 rotation=0, # ラベルの回転角度 ) # 縦軸のラベルを設定 ax.set_ylabel( ylabel="売上 [袋]", # 縦軸の文字列 fontsize=14, # フォントサイズ color="#505050FF", # 文字色 rotation=90, # ラベルの回転角度 ) # 横軸の目盛ラベルのパラメータを設定 ax.tick_params( axis="x", # パラメータを変更する軸 rotation=45, # ラベルの回転角度 labelcolor="#505050FF", # 文字色 ) # 縦軸の目盛ラベルのパラメータを設定 ax.tick_params( axis="y", # パラメータを変更する軸 labelcolor="#505050FF", # 文字色 ) # 縦軸の範囲を指定 ax.set_ylim( bottom=50, # 下限 top=450, # 上限 ) # 縦軸のスケールを指定 ax.set_yscale( value="linear", # 対数グラフなら"log"を指定 ) # 縦軸の目盛間隔を設定 ax.set_yticks( ticks=[y for y in range(100, 500, 100)], # 間隔 labels=[f"{y}袋" for y in range(100, 500, 100)], # ラベル minor=False, # 補助目盛か? ) ax.set_yticks( ticks=[y for y in range(50, 500, 50)], # 間隔 minor=True, # 補助目盛か? ) # 縦軸の目盛を設定 ax.grid( axis="y", # 目盛を指定する軸 which="major", # 主目盛か補助目盛か visible=True, # 表示状態 color="#B0B0B0FF", # 目盛線の色 alpha=0.8, # 不透明度 linestyle="solid", # 線の種類 linewidth=1, # 線の太さ ) # 縦軸の補助目盛を設定 ax.grid( axis="y", # 目盛を指定する軸 which="minor", # 主目盛か補助目盛か visible=True, # 表示状態 color="#B0B0B0FF", # 目盛線の色 alpha=0.8, # 不透明度 linestyle="dashed", # 線の種類 linewidth=0.5, # 線の太さ ) # グラフをファイルに保存 fig.savefig("fruits.png") return fig, ax fig, ax = generate_bar_plot_sample()
出力結果
上記のスクリプトを実行すると以下の棒グラフが出力されます。
終わりに
matplotlibには同じ結果を得る方法が複数存在し、それらは複数のWebサイトでバラバラに紹介されています。所望のグラフを作成するためには、使い方を何度も検索する必要があります。そのような手間を削減するために、この記事では棒グラフに必要そうな設定を一つのコードにまとめました。
なお、著者は以下のバージョンのライブラリで実行を確認しました。
- matplotlib==3.5.1
- japanize_matplotlib==1.1.3