Matplotlibで12か月ごとに年の目盛りを表示する日付軸の設定方法
Matplotlibで時系列データを可視化する際、「月ごとの細かい目盛りは残しつつ、年ラベルだけ12か月ごと(=毎年)に表示したい」というニーズはよくあります。本記事では、matplotlib.datesモジュールが提供するYearLocatorやMonthLocator、DateFormatterを組み合わせて、見やすい日付軸を実現する方法を解説します。
実装の手順
- 図のサイズを設定し、サブプロット周辺の余白を自動調整します。
- Pandas・NumPy・matplotlib.datesを使って、日付インデックス、データ系列、および各種ロケーター/フォーマッター(years、months、monthsFmt、yearsFmt)を準備します。
- DateFormatterに「%B」を指定すると、月名がフルネーム(January、Februaryなど)で表示されます。
- DateFormatterに「%Y」を指定すると、年が4桁の数値で表示されます。
- plt.figure()で新しい図を作成します(既存の図がある場合はそれをアクティブ化します)。
- add_subplot()で図にax(Axesオブジェクト)を追加します。
- plot()メソッドで「dts」(datetime型のインデックス)と「s」(データ系列)をプロットします。
- set_minor_locator()にmonthsを設定することで、小目盛りが月単位になり、大目盛りの年ラベルが12か月ごとに表示されるようになります。
- plt.show()で図を画面に表示します。
コード例
import numpy as np
from matplotlib import pyplot as plt, dates as mdates
import pandas as pd
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# 2020年1月〜2021年6月まで7日間隔の日付範囲を生成
d = pd.date_range("2020-01-01", "2021-06-01", freq="7D")
y = np.cumsum(np.random.normal(size=len(d)))
s = pd.Series(y, index=d)
# ロケーターとフォーマッターの定義
years = mdates.YearLocator()
months = mdates.MonthLocator()
monthsFmt = mdates.DateFormatter('%B')
yearsFmt = mdates.DateFormatter('\n%Y')
dts = s.index.to_pydatetime()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(dts, s)
# 小目盛り:月ごとに月名を表示
ax.xaxis.set_minor_locator(months)
ax.xaxis.set_minor_formatter(monthsFmt)
plt.setp(ax.xaxis.get_minorticklabels(), rotation=90)
# 大目盛り:12か月ごとに年を表示
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
plt.show()
ポイント解説
mdates.YearLocator()は年単位の大目盛り(major tick)を配置するロケーター、mdates.MonthLocator()は月単位の小目盛り(minor tick)を配置するロケーターです。この2つを組み合わせることで、月レベルの詳細な情報を保ちながら、年に一度だけ目立つ年ラベルを表示できます。
また、DateFormatter('\n%Y')のように先頭に改行文字を入れると、年ラベルが月ラベルより一段下にずれて表示され、ラベル同士の重なりを防ぐことができます。plt.setp()で小目盛りのラベルを90度回転させているのも、長い月名が重ならないようにするための工夫です。
出力結果
上記のコードを実行すると、次のようなグラフが出力されます。月名が縦向き(90度回転)の小目盛りラベルとして表示され、その下段に年ラベルが12か月ごとに配置されているのが確認できます。


-
Matplotlibで3Dプロットのアスペクト比を設定する方法
Matplotlibで3Dプロットのアスペクト比を設定するには、set_aspect()メソッドを使用します。ここでは、曲面プロット(サーフェスプロット)を例に、具体的な手順とサンプルコードを解説します。 3Dプロットのアスペクト比を設定する手順 以下の手順に従って実装します。 figure()メソッドで新しい図を作成するか、既存の図をアクティブにします。 projection=3d を指定して現在のAxes(座標軸)を取得します。存在しない場合は自動的に作成されます。 numpyを使ってデータ点 R、Y、z を生成します。 R、Y、zをもとにサーフェスプロット(曲面図)を作成します。 s
-
Matplotlibのグラフをフルスクリーンで表示する方法
Matplotlibで作成したグラフをフルスクリーン(全画面)で表示したい場合、full_screen_toggle()メソッドを使用すると簡単に実現できます。このメソッドは、現在開いているフィギュアウィンドウを全画面モードに切り替える機能を持ちます。 手順 figure()メソッドを使って、新しいフィギュアを作成するか、既存のフィギュアをアクティブにします。 2つのリストを渡してplot()メソッドを呼び出し、折れ線グラフを描画します。 get_current_fig_manager()メソッドで、現在のフィギュアのマネージャー(figure manager)を取得します。 取得したマネー