(matplotlib ver3.2.0)
matplotlibで描画したグラフの目盛り文字列を変更したい場合、タイトルの通り使い分けます。
ちょっと使い方にクセがあるのでまとめました。
#pyplot.xticksは、目盛りの座標値を第一引数、置き換え文字列を第二引数とする
plt.xticks([1, 2, 3, 4, 5], [ "A", "B", "C", "D", "E"])
#axes.set_xticklabelsは、置き換え後の文字列だけ指定する
axes.set_xticklabels(["A", "B", "C", "D", "E"])
同様に、pyplot.yticks()も、axes.set_yticklabels()で置き換えられます。
axes.set_xticklabelsの注意すべき点
axes.set_xticklabels()では、目盛りを全体の文字列を順次指定する必要があるため、目盛りがたくさんあると、一部の目盛りだけを変更したい時などに面倒です。
例えば、次のようにプロットすると細かい目盛りが付いてしまい、全ての文字列を設定するのがとても手間だったりします。
fig, ax = plt.subplots()
ax.plot([1,2,3,4,5] , [3,4,5,6,7])
axes.get_xticklabels()を使って置き換える
axes.get_xticklabels()で現状の目盛りを取得できるため、それを基に必要な箇所だけ新たな文字列で置き換えます。
なお、axes.get_xticklabels()はTextオブジェクトのため少し工夫が必要です。
目盛りの文字列そのものには、次のようにアクセスできます。
for item in ax.get_xticklabels():
print(item.get_text())
#出力結果
上記より、次のように書くことで目盛り文字列を置き換えます。
fig, ax = plt.subplots()
ax.plot([1,2,3,4,5] , [3,4,5,6,7])
fig.canvas.draw() #座標値などを決めるために呼び出しておく
#これを呼び出さずに、get_xticklabels()を読んでも文字列が取れない
#ちなみにplot.show()だとプロットがFixしてしまうのでダメ
d = {1:"A", 2:"B", 3:"C", 4:"D", 5:"E"} #置き換える座標と文字列を辞書で定義しておく
#辞書に登録した座標の位置を置き換えていく
#それ以外の位置は空白とする
#(ここはちょっとテキトー。やりたい文脈に応じて書きかえが必要ですね。)
l = []
for item in ax.get_xticklabels():
k = float(item.get_text())
if k in d:
l.append(d[k])
else:
l.append("")
ax.set_xticklabels(l)
plt.show()
ちなみにこちらの方法では、マイナー目盛り線も消さずに残すことができます。
まあ、、上のaxes.set_xticklabelsの設定を簡略化する方が良いですね。