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

  • 2019年11月2日
  • 2023年12月1日
  • Python
  • 314view

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

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

 

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

 

しかし、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万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア
最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG