Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

matplotlib: xticks/yticksで設定した軸ラベルの重なりを整える

やりたいこと

f:id:Kurene:20191017202431p:plain

pythonmatplotlib を用いて時系列データをプロットするとき、時系列のラベルが大量にあるせいで、 xticks, yticks で設定した軸ラベルが重なってしまうことがあります。plt.xticksrotation オプションでラベルを回転させれば多少マシにはなりますが、できれば軸グラフのラベルの間隔をいい感じで設定したいと思うことがあります。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(seed=0)
x_label = np.arange(1980, 2020)
data = np.random.normal(0.0, 0.1, len(x_label))\
     + np.linspace(0, 1.0, len(x_label))
plt.plot(data, label="Trend", color="c", linewidth=2)
plt.xticks(np.arange(0, len(x_label)), x_label, rotation=60)
plt.show()

解決方法

ticks という変数を使い、plt.xticks に与えるインデックス配列とラベル配列をticks 間隔で生成することで、良い感じにラベルを削減・整理できました。

f:id:Kurene:20191017202556p:plain

import numpy as np
import matplotlib.pyplot as plt

ticks = 5
np.random.seed(seed=0)
x_label = np.arange(1980, 2020)
data = np.random.normal(0.0, 0.1, len(x_label))\
     + np.linspace(0, 1.0, len(x_label))
plt.plot(data, label="Trend", color="c", linewidth=2)
plt.xticks(np.arange(0, len(x_label), ticks), x_label[::ticks], rotation=60)
plt.show()