matplotlibで棒グラフを作成するための全設定

matplotlibの棒グラフ

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の棒グラフ

終わりに

matplotlibには同じ結果を得る方法が複数存在し、それらは複数のWebサイトでバラバラに紹介されています。所望のグラフを作成するためには、使い方を何度も検索する必要があります。そのような手間を削減するために、この記事では棒グラフに必要そうな設定を一つのコードにまとめました。

なお、著者は以下のバージョンのライブラリで実行を確認しました。

  • matplotlib==3.5.1
  • japanize_matplotlib==1.1.3
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

ITベンチャーでデータ分析、AI開発、システム設計、提案、営業、組織管理、公演、採用などなど多数の役割に従事してきました。

様々な職業や背景の方々と交流するうちに、幅広い分野で問題を解決したり価値を生み出したりするためには、個別の知識だけでなく、汎用的に物事を考える力を伸ばしていく必要があると考えるようになりました。

更に、自分自身の考える力だけでなく、より多くの人々の考える力のトレーニングを応援することで、社会全体を良くしていけるのではないかと考えて、このサイトを作りました。

目次
閉じる