質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

174閲覧

matplotlibで描画したグラフの軸を指数表示したいです

mameshiba_4792

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2024/11/06 06:42

編集2024/11/12 11:23

実現したいこと

matplotlibで描画したグラフの軸を指数表示したいです

発生している問題・分からないこと

matplotlibで描画したグラフの軸が指数表示されるときは、グラフの左上に指数部分が表示されることがあります(例えば1e-5など)。
これを、軸のすべての数字を、1.0×10^-5、2.0×10^-5、、、のように表示させたいです。

別モジュールplotlyの、exponentformat="power"を使えばできる
https://kenbridge-studyspace.com/plotly-axis-power/
とのことなのですが、これと同様のことをmatplotlib内で行いたいです。
matplotlib内ではどのようにコーディングすればよろしいでしょうか。

わがままなお願いであることは承知の上ですが、ご教授いただけませんでしょうか。
何卒よろしくお願いいたします。

別モジュールplotlyを用いたやり方

import random import plotly.graph_objects as go random.seed(123) X=[random.uniform(10000, 100000) for i in range(20)] Y=[random.uniform(10000, 100000) for i in range(20)] fig = go.Figure() fig.add_trace(go.Scatter(x=X, y=Y, mode='markers', marker=dict(color='red', size=10), )) fig.update_layout(plot_bgcolor="white") fig.update_xaxes(exponentformat="power", linecolor='black', gridcolor='gray',mirror=True) fig.update_yaxes(exponentformat="power", linecolor='black', gridcolor='gray',mirror=True) fig.show()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

調べて見つけた方法
https://qiita.com/code0327/items/d2f199c5e1267d4822fb
の、
ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y,_: f'{y*10:.1f}'+ r'$\times 10^{-1}$'))
を試したのですが、数字の部分のフォント(Times New Roman)と指数部分のLatex表記のフォントが合わせられず、断念しました。
具体的にフォントが合わないというのは、plt.rcParams['font.family'] = 'Times New Roman'としても、以下のY軸のように「0.9」と「×10^-6」のフォントが合わないという事象です。
plt.rcParams['mathtext.fontset'] = 'stixsans'として少し見た目を寄せることも検討しましたが、やはり違和感が拭えません。
そもそもLatex表記を用いずにplotlyのような表記にしたいです。
イメージ説明

イメージ説明

補足

melian👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poto568

2024/11/06 07:52

「調べて見つけた方法」のリンク先にある「目盛文字の書式設定」のコードを Google Colabにコピペしたら例示されている通りのグラフが表示されましたが 「フォントが合わせられず」はどこから来た話ですか?
mameshiba_4792

2024/11/06 10:08 編集

poto568様 ご回答ありがとうございます。 import random import matplotlib.pyplot as plt import matplotlib.ticker as ticker random.seed(123) X=[random.uniform(10000, 100000) for i in range(20)] Y=[random.uniform(10000, 100000) for i in range(20)] plt.rcParams['font.family'] = 'Times New Roman' plt.scatter(X, Y, color='black') ax = plt.gca() ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y,_: f'{y*0.00001:.1f}'+ r'$\times 10^{6}$')) plt.show() 例えば以上を実行した場合、質問に挙げ直しました画像のようにY軸の数字の「0.9」と「×10^6」のフォントが合わないという事象です。
melian

2024/11/06 09:44

> 数字の部分のフォント(Times New Roman)と指数部分のLatex表記のフォントが合わせられず、 \mathdefault で修飾してみてはどうでしょうか。 ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y,_: f'{y*0.0001:.1f}'+ r'$\mathdefault{\times 10^{6}}$'))
mameshiba_4792

2024/11/06 10:12

melian様 ご回答ありがとうございます。 いただいたコードでうまくいきました! 本当にありがとうございます。
mameshiba_4792

2024/11/06 10:13

melian様 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答2

0

ベストアンサー

※ コメントから転記

数字の部分のフォント(Times New Roman)と指数部分のLatex表記のフォントが合わせられず、

LaTeX表記の部分を \mathdefault で修飾してみてはどうでしょうか。

python

1ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda y,_: f'{y*0.0001:.1f}'+ r'$\mathdefault{\times 10^{6}}$'))

投稿2024/11/06 10:32

melian

総合スコア20574

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mameshiba_4792

2024/11/12 11:24

いただいた回答に関しまして,お伺いしたいことがございます。 matplotlibの軸ラベルの表記で,いただいた回答を活かしまして, ''r'$\mathdefault{F_{n}^{l}}$ (N)' のようにして追加した画像(Fnd(N)と書かれています)のようになっているのですが, こちらのFndを更に斜体にする方法はございますでしょうか. ''r'$\it{\mathdefault{F_{n}^{l}}}$ (N)' と試してみたのですができませんでした. 教えていただけますと幸いです。 何卒よろしくお願いいたします。
melian

2024/11/12 12:03

r'$\mathdefault{\it{F}_{n}^{l}}$ (N)' か、 r'$\mathdefault{\mathit{{F}_{n}^{l}}}$ (N)') とすれば斜体になるのですが、フォントの種別が異なっている様に見えます。(\mathdefault を指定しない場合と同じ状態)
guest

0

melian様

いただいた回答に関しまして,お伺いしたいことがございます。

matplotlibの軸ラベルの表記で,いただいた回答を活かしまして,
''r'$\mathdefault{F_{n}^{l}}$ (N)'
のようにして以下の画像のようになっているのですが,
イメージ説明
こちらのFndを更に斜体にする方法はございますでしょうか.

''r'$\it{\mathdefault{F_{n}^{l}}}$ (N)'
と試してみたのですができませんでした.

教えていただけますと幸いです。
何卒よろしくお願いいたします。

投稿2024/11/12 11:21

mameshiba_4792

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問