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には同じ結果を出力する方法が複数存在し、それらは複数のWebサイトでバラバラに紹介されています。所望のグラフを作成するためには、使い方を何度も検索する必要があります。そのような手間を削減するために、この記事では折れ線グラフに必要そうな設定を一つのコードにまとめました。
サンプルデータの横軸の値には、折れ線グラフでよく使われるdatetime型を採用しました。日時の目盛ラベルの設定方法も色々とありますが、この記事のようにラベルを直接設定する方法がシンプルでわかりやすいのではないかと思います。
なお、著者は以下のバージョンのライブラリで実行を確認しました。
- matplotlib==3.5.1
- japanize_matplotlib==1.1.3
あわせて読みたい

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