matplotlibのメモリラベルテキストの回転だけをオブジェクト指向インターフェースで行いたい

主にX軸のメモリが日付などの場合に発生するのですが、matplotlibのメモリテキストが重なって読めなくなることがあります。
それをテキストを回転させて読めるようにする方法のまとめです。

とりあえず、プロットするデータを生成しておきます。


import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import numpy as np
import pandas as pd

# 日付のリスト生成
dates = [datetime(2021, 1, 1) + timedelta(days=i) for i in range(10)]
date_str_list = [d.strftime("%Y-%m-%d") for d in dates]
# ランダムウォークデータ作成
data = np.cumsum(np.random.randn(10))

他サイトなどを見ると、よく用いられているのは、
plt.xticks(rotation=角度)
です。
結果だけ見れば正直これで十分なのですが、
これでも確かに回転できますが、これは、オブジェクト指向インターフェースではなく、ここだけpyplotインターフェースになります。
個人的に、これらを混在させるのは好きではないのであまり好きではありません。


fig = plt.figure(facecolor="w")
ax = fig.add_subplot(1, 1, 1)
ax.plot(date_str_list, data)
plt.xticks(rotation=90)
plt.show()

そしてオブジェクト指向インターフェースで回転させる方法として、よく見かけるのは、
ax.set_xticklabels(xlabels, rotation=角度)
とするものです。
これでもラベルを回転できるのですが、第一引数のxlabelsが省略できず、改めて指定する必要があります。
回転だけやりたいんだというときにこの仕様は面倒です。

前置き長くなりましたが、以上の2個の方法の良いとこどりで、オブジェクト指向インターフェースで回転だけを実行する方法を調べました。
結果として以下の方法があることがわかりました。

ax.tick_params(axis="x", labelrotation=角度)
ax.xaxis.set_tick_params(rotation=角度)
引数はどちらもlabelrotation=でもrotation=でも両方対応しているようです。

それぞれコード例は以下のようになります。


fig = plt.figure(facecolor="w")
ax = fig.add_subplot(1, 1, 1)
ax.plot(date_str_list, data)
ax.tick_params(axis="x", labelrotation=90)
plt.show()

fig = plt.figure(facecolor="w")
ax = fig.add_subplot(1, 1, 1)
ax.plot(date_str_list, data)
ax.xaxis.set_tick_params(rotation=90)
plt.show()

コメントを残す

メールアドレスが公開されることはありません。