添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
71
53

More than 3 years have passed since last update.

pyplotではxticks()、Axesではset_xticklabels()を使うんだって。

Posted at

(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の設定を簡略化する方が良いですね。

71
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
53