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

matplotlibの折れ線グラフ

matplotlibで折れ線グラフを作成するPythonスクリプトを紹介します。このスクリプトには折れ線グラフに関係する設定項目を全て詰め込みました。

目次

スクリプト全文

import datetime

import matplotlib.pyplot as plt
import japanize_matplotlib


def generate_plot_sample():
  """
  matplotlibで折れ線グラフを生成するサンプル。
  備忘録として、主要な設定項目を全て活用する。
  pyplotではなくAxesを使用する。
  """

  # 可視化するデータのサンプル

  # 品目
  items = [
      "りんご", "バナナ", "キウイ"
  ]

  # 売上
  sales  = [
      [213, 293, 242, 234],  # りんご
      [291, 272, 311, 298],  # バナナ
      [178, 142, 113, 89],  # キウイ
  ]

  # 棒の色
  colors = [
      "#EE3300FF",
      "#EECC00FF",
      "#00DD33FF"
  ]

  # 年月日
  dates = [
    datetime.datetime(year=2021, month=10, day=1),
    datetime.datetime(year=2021, month=11, day=1),
    datetime.datetime(year=2021, month=12, day=1),
    datetime.datetime(year=2022, month=1, day=1)
  ]

  # FigureおよびAxesの生成
  fig, ax = plt.subplots(
    facecolor="#FFFFFFFF",  # 背景色
    figsize=(10, 6),  # 画像のサイズ
  )

  # 描画
  for i in range(len(colors)):
    rects = ax.plot(
      dates,  # 横軸の値のリスト
      sales[i],  # 縦軸の値のリスト
      marker="o",  # マーカーの種類
      markerfacecolor="#FFFFFFFF",  # マーカーの色
      markeredgecolor="#000000FF",  # マーカーの線色
      linestyle="--",  # 線の形状
      color=colors[i],  # 棒の色
      label=items[i],  # 線の名称
      linewidth=2,  # 線の太さ
    )

    # マーカーの上に値を書き込み
    for j in range(len(sales[i])):
      ax.annotate(
        text=sales[i][j],  # 書き込む値
        xy=(dates[j], sales[i][j]),  # 位置
        xytext=(0, 3),
        textcoords="offset points",
        ha='center',
        va='bottom',
        fontsize=10,  # フォントサイズ
        color="#505050FF",  # 文字色
      )

  # グラフ領域の背景色を設定
  ax.set_facecolor(
    color="#F0F0F0FF",  # 背景色
  )

  # グラフのタイトルを設定
  ax.set_title(
    label="果物の売上",  # 文字列
    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=350,  # 上限
  )

  # 縦軸のスケールを指定
  ax.set_yscale(
    value="linear",  # 対数グラフなら"log"を指定
  )

  # 横軸の目盛間隔を設定
  ax.set_xticks(
    ticks=dates,  # 間隔
    labels=[f"{d.year}年{d.month}月" for d in dates],  # ラベル
    minor=False,  # 補助目盛か?
  )

  # 縦軸の目盛間隔を設定
  ax.set_yticks(
    ticks=[y for y in range(100, 400, 100)],  # 間隔
    labels=[f"{y}袋" for y in range(100, 400, 100)],  # ラベル
    minor=False,  # 補助目盛か?
  )
  ax.set_yticks(
    ticks=[y for y in range(50, 400, 50)],  # 間隔
    minor=True,  # 補助目盛か?
  )

  # 横軸の目盛を設定
  ax.grid(
    axis="x",  # 目盛を指定する軸
    which="major",  # 主目盛か補助目盛か
    visible=True,  # 表示状態
    color="#B0B0B0FF",  # 目盛線の色
    alpha=0.8,  # 不透明度
    linestyle="solid",  # 線の種類
    linewidth=1,  # 線の太さ
  )

  # 縦軸の目盛を設定
  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,  # 線の太さ
  )

  # 凡例の設定
  ax.legend(
      bbox_to_anchor=(1, 1, 0, 0),  # 凡例を配置する範囲のbbox
      loc="upper left",  # bboxのどこに凡例を置くか
      borderaxespad=0.5,  # 凡例とbboxの隙間
      fontsize=12,  # フォントサイズ
      labelcolor="#505050FF",  # 文字色
  )

  # Axesの位置を調整
  # 凡例を外に置いた場合や、横軸の目盛を回転させた場合、
  # 調整しないとはみ出すことがある。
  ax.set_position([0.1, 0.2, 0.75, 0.7])

  # グラフをファイルに保存
  fig.savefig("fruits_plot.png")

  return fig, ax


fig, ax = generate_plot_sample()

出力結果

上記のスクリプトを実行すると以下の折れ線グラフが出力されます。

matplotlibの折れ線グラフ

終わりに

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

サンプルデータの横軸の値には、折れ線グラフでよく使われるdatetime型を採用しました。日時の目盛ラベルの設定方法も色々とありますが、この記事のようにラベルを直接設定する方法がシンプルでわかりやすいのではないかと思います。

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

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

この記事を書いた人

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

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

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

目次
閉じる