質問するログイン新規登録
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1053閲覧

Matplotlibで目盛りを冪乗表記にしたい

tukituki_84

総合スコア27

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/06/28 04:48

編集2023/06/28 05:47

0

0

実現したいこと

Matplotlibで目盛りを冪乗表記にしたい

前提

Matplotlibでグラフを作成しています。
目盛りの表記を×10^-14のように、冪乗表記にしたいです。
そのまま実行すると冪乗表記ではなく、グラフの左上に「1e-14」というふうに表記されます。
イメージ説明

解決したいこと

目盛りの方に1.5×10^-14というふうに表記したいです。
グラフ左上の「1e-14」というような表記を消したいです。

どのようなコードを追加すればいいでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

目盛表記を上書きすることはできるようです。

fig.canvas.draw() で内部的に描画をした後で get_yticklabels()get_text() を使ってY軸表記の文字列のリストを取得します。次に,それを加工し set_yticklabels() で上書きします。

なお,文字数を増やすと表記の先頭が欠けたので fig.subplots_adjust(left=0.2) で左の余白(デフォルトは left=0.125)を増やしています。

Python

1import numpy as np 2import matplotlib.pyplot as plt 3 4x = np.arange(11) 5y = 1e-18 * np.exp(x) 6 7fig, (ax0, ax1) = plt.subplots(2, figsize=(5, 8)) 8 9ax0.plot(x, y) 10ax1.plot(x, y) 11 12fig.canvas.draw() 13ytl = [x.get_text() for x in ax1.get_yticklabels()] 14ytl2 = [s if s == "0.0" else s + "x10^-14" for s in ytl] 15ax1.set_yticklabels(ytl2) 16print(ytl); print(ytl2) 17# ['−0.5', '0.0', '0.5', '1.0', '1.5', '2.0', '2.5'] 18# ['−0.5x10^-14', '0.0', '0.5x10^-14', '1.0x10^-14', '1.5x10^-14', '2.0x10^-14', '2.5x10^-14'] 19 20fig.subplots_adjust(left=0.2) 21 22plt.show()

グラフ出力

投稿2023/07/01 11:00

little_street

総合スコア491

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

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

0

この回答はGPT-4による自動生成回答です

Matplotlibで目盛りを冪乗表記にするには、tickerモジュールのFuncFormatterを使用します。以下に具体的なコードを示します。

python

1import matplotlib.pyplot as plt 2import matplotlib.ticker as ticker 3import numpy as np 4 5# データ生成 6x = np.linspace(0, 2*np.pi, 100) 7y = np.sin(x) * 1e-14 8 9fig, ax = plt.subplots() 10 11# y軸の目盛りを冪乗表記にする 12formatter = ticker.FuncFormatter(lambda x, pos: '{:.1f}e-14'.format(x*1e14)) 13ax.yaxis.set_major_formatter(formatter) 14 15ax.plot(x, y) 16plt.show()

このコードでは、FuncFormatterにラムダ関数を渡しています。この関数は、目盛りの値を引数として受け取り、それを冪乗表記の文字列に変換します。'{:.1f}e-14'.format(x*1e14)の部分で、目盛りの値を10^14倍して1桁の小数点以下まで表示する冪乗表記の文字列を作成しています。

また、ax.yaxis.set_major_formatter(formatter)で、y軸の目盛りのフォーマッタを設定しています。これにより、y軸の目盛りが冪乗表記になります。

投稿2023/06/28 04:49

teratail-ai

Powered by GPT-4

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

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

tukituki_84

2023/06/28 04:57

posとは何でしょうか。
quickquip

2023/06/28 05:13

AIの回答にコメントしても答えてくれるわけではないので質問に追記した方がいい(=人の目につきやすい)ですよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問