コンターラベル(clabels)を希望どおりにフォーマットするには、fmt
の引数としてフォーマッタインスタンスを使用することができます。あなたはclabelsが少し大きくなっているので、実際に必要とされるものに対応していなくてもよい。ここ
import matplotlib.pyplot as plt
import matplotlib.ticker
import matplotlib.colors
import numpy as np
x = np.linspace(-6,7, 100)
X,Y = np.meshgrid(x,x)
dat = np.exp(-(X-2)**2-(Y-2)**2)* 15e12
cutoff = 1e6
CS = plt.contour(dat, [2e6, 5e8, 8e11], norm = matplotlib.colors.LogNorm(vmin=cutoff))
fmt = matplotlib.ticker.LogFormatterSciNotation()
fmt.create_dummy_axis()
plt.clabel(CS, fontsize=9, inline=1, fmt=fmt)
plt.show()
を与えるLogFormatterSciNotation
を、使用することができ、うまく探してラベルを持つように例えば
。 Formatterインスタンスの代わりに、値を入力として受け取り、フォーマットされた文字列を返す通常の関数を使用することもできます。そこで、以下
はプラス記号と不要なゼロを除去することにより、数値をフォーマットしまう機能です:
import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np
x = np.linspace(-6,7, 100)
X,Y = np.meshgrid(x,x)
dat = np.exp(-(X-2)**2-(Y-2)**2)* 15e12
cutoff = 1e6
CS = plt.contour(dat, [2e6, 5e8, 8e11], norm = matplotlib.colors.LogNorm(vmin=cutoff))
def func(x):
s = "%.0g" % x
if "e" in s:
tup = s.split('e')
significand = tup[0].rstrip('0').rstrip('.')
sign = tup[1][0].replace('+', '')
exponent = tup[1][1:].lstrip('0')
s = ('%se%s%s' % (significand, sign, exponent)).rstrip('e')
return s
plt.clabel(CS, fontsize=9, inline=1, fmt=func)
plt.show()