Pythonのmatplotlibにおいて、get_yticklabelsを実行してもY軸の目盛り部分にある文字(ticker)を取得できない問題が発生しました。
やりたいことは、Y軸の目盛り部分にある数字に¥マークを付けてお金形式の文字列にすることです。
しかし、get_yticklabels関数を呼び出してもtickerで設定した文字列が取得できない。
このような問題でハマっている人は意外に多いのでは?
問題をstack overflowで質問したら解決したので記事化します!
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |
発生した問題
実現したいことは、画像のように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軸のラベル情報の更新方法でした!
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |