get_yticklabelsでtickerラベルが取得できない!matplotlibのグラフにおいてY軸の目盛り(ticker)の文字を変えるには!?

Pythonのmatplotlibにおいて、get_yticklabelsを実行してもY軸の目盛り部分にある文字(ticker)を取得できない問題が発生した。

やりたいことは、Y軸の目盛り部分にある数字に¥マークを付けてお金形式の文字列にすること。

matplotlibのget_yticklabelsで円マークを付ける

しかし、get_yticklabels関数を呼び出してもtickerで設定した文字列が取得できない。

このような問題でハマっている人は意外に多いのでは?

問題をstack overflowで質問したら解決したので記事化しておく!

発生した問題

実現したいことは、画像のようにY軸のtickラベルの数字の左側に「¥」マークを付けて

tickラベルを更新すること。

考え方として、「get_yticklabels」を使って「Y軸のtickラベル」のデータの取得し、set_textで更新を試みたが、get_yticklabelsで空文字しか取得できなかった

この問題をstack overflow上でkunifさんがサンプルコード付きで丁寧に教えてくれました。

しかも、質問を投稿してから30分で解決するというスピード感です!

kunifさんありがとうございます!

pythonのmatplotlibにてget_yticklabels関数でy軸のtickラベルの情報が取得できない

次の章で具体的な解決方法を解説します!

解決方法をサンプルコードで解説!

get_yticklabelsでtickラベルの情報が取れなかったのは、「fig.canvas.draw() 」を先に呼び出さなかったことが原因だったようです。「fig.canvas.draw()」をよびだすことによって、内部的にグラフを描画するようです。

実装方法は以下の通り

#自動的に振られたY軸の値に
#値段などの¥マークを追加するには

import matplotlib.pyplot as plt
from matplotlib.ticker import *

import locale
locale.setlocale(locale.LC_ALL, '')


fig, ax1 = plt.subplots()

#円マークを付けるため、1000毎にY値を出す。それによってY軸に小数点が付かないようにする
ax1.yaxis.set_major_locator(MultipleLocator(1000))
plt.plot([1,2,3,4,5] , [500,4000,5555,6000,7000])

#ポイントは「fig.show()」ではなく、canvas.drawを使って、変更された図を(内部的に)更新する。
#図を更新することによって、get_yticklabelsを実行したときに y軸のtickラベルの値を取得できる
fig.canvas.draw() 

#get_yticklabelsを実行するとき、 fig.canvas.draw() を忘れるとy軸のtickラベルの値を取得できない
y_labels = [item.get_text() for item in ax1.get_yticklabels()]  

for i  in  range(len(y_labels)):
    #y_labels[i] = '¥' + y_labels[i]  # 単純に文字列前に挿入
    y_labels[i] = locale.currency(int(y_labels[i]) , grouping=True) 
    
ax1.set_yticklabels(y_labels)  # 変更したラベルを設定する
plt.show()

まとめ

以上、get_yticklabels関数を呼び出してもラベル情報が取得できないときの解消方法、Y軸のラベル情報の更新方法でした!

参考講座

最後にPythonの初学者に役立つ参考講座を紹介します。

■Udemyの「みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習」

プログラミング言語Pythonを使って、Pythonの基本構文から学び、機械学習まで学べるもの。数学も学べるためお得感があります!

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR