私は、範囲が10^-3
から10^+3
になるログログプロットを持っています。値<10^0
が指数部に-
の符号を持つ方法と同様に値≥10^0
に指数部の+
サインを付けることを希望します。 matplotlibでこれを行う簡単な方法はありますか?matplotlib軸の指数に+記号を追加する
私はFuncFormatter
を調べましたが、これを達成するにはあまりにも複雑で、動作させることができませんでした。
私は、範囲が10^-3
から10^+3
になるログログプロットを持っています。値<10^0
が指数部に-
の符号を持つ方法と同様に値≥10^0
に指数部の+
サインを付けることを希望します。 matplotlibでこれを行う簡単な方法はありますか?matplotlib軸の指数に+記号を追加する
私はFuncFormatter
を調べましたが、これを達成するにはあまりにも複雑で、動作させることができませんでした。
。ダックの値が1より大きいか小さいかの条件が必要です。log10(tick value)
が>0
の場合は、ラベル文字列に+
記号を追加します。そうでない場合は、マイナス記号が自動的に取得されます。
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
# sample data
x = y = np.logspace(-3,3)
# create a figure
fig,ax = plt.subplots(1)
# plot sample data
ax.loglog(x,y)
# this is the function the FuncFormatter will use
def mylogfmt(x,pos):
logx = np.log10(x) # to get the exponent
if logx < 0:
# negative sign is added automatically
return u"$10^{{{:.0f}}}$".format(logx)
else:
# we need to explicitly add the positive sign
return u"$10^{{+{:.0f}}}$".format(logx)
# Define the formatter
formatter = ticker.FuncFormatter(mylogfmt)
# Set the major_formatter on x and/or y axes here
ax.xaxis.set_major_formatter(formatter)
ax.yaxis.set_major_formatter(formatter)
plt.show()
フォーマット文字列のいくつかの説明:
"$10^{{+{:.0f}}}$".format(logx)
重括弧{{
と}}
を指数として提起しなければならない、その中にすべてのものを意味し、LaTeX
に渡されます。単一の中括弧は、フォーマット文字列を格納するためにpythonで使用されるため、二重の括弧が必要です。この場合は{:.0f}
です。書式指定の詳細については、docs hereを参照してください。ただし、TL; DRでは小数点以下の桁数が0の浮動小数点数をフォーマットしています(つまり、本質的に整数として表示しています)。 np.log10
がfloatを返すため、指数はこの場合はfloatです。 (代わりに、np.log10
の出力をintに変換してから、文字列をintとしてフォーマットすることができます。好みの好みのものを使用してください)。
Ok thx、私はこれと一緒に行くつもりです。' {{:.0f}}の形式を説明できますか? '私は過剰な角括弧はエスケープするために使われますが、正確には ':.0f'は何をしますか? – nluigi
:
def fmt(y, pos):
a, b = '{:.2e}'.format(y).split('e')
b = int(b)
if b >= 0:
format_example = r'$10^{+{}}$'.format(b)
else:
format_example = r'$10^{{}}$'.format(b)
return
その後FuncFormatter
を使用して、例えばカラーバーの場合:plt.colorbar(name_of_plot,ticks=list_with_tick_locations, format = ticker.FuncFormatter(fmt))
。あなたはimport matplotlib.ticker as ticker
を輸入しなければならないと思います。あなたはmatplotlib.ticker
モジュールからFuncFormatter
でこれを行うことができます
よろしく
そのようなx軸とy軸の目盛りの注釈を書式設定することを意味しますか? – tokamak
@tokamak - 実際にはy軸だけに興味がありますが、両方の軸を個別に設定するとよいでしょう – nluigi
目盛りを生成するコードを見るhttps://github.com/matplotlib/matplotlib/blob/ 7d1a7c2e4637efba239ad3b984928c0175d45f98/lib/matplotlib/ticker.py#L803自分で変更する明白な方法がないようです。私は非最適な方法は、変更ラインの変更版を作成することになると思います。 –