matplotlibの目盛りのラベルの書式設定の先頭に0を付ける

matplotlibの "0.0"、 "0.1"、 "0.2"ではなく、 "0"、 ".1"、 ".2"になるように数値小数データのティックラベルを変更するにはどうすればいいですか?例えば、

hist(rand(100))
xticks([0, .2, .4, .6, .8])

"0.0"、 "0.2"などのようにラベルをフォーマットします。これは、 "0.0"から先頭の "0"を取り除き、 "1.0"で末尾の "0"を取り除くことを知っています。

from matplotlib.ticker import FormatStrFormatter
majorFormatter = FormatStrFormatter('%g')
myaxis.xaxis.set_major_formatter(majorFormatter) 

それは良いスタートですが、私はまた、 "0.2"と "0.4"などの "0"接頭辞を取り除きたいと思います。これはどのようにすることができますか?

4

2 答え

私はそれが最良の方法であるかどうかはわかりませんが、 matplotlib.ticker.FuncFormatter をクリックしてください。たとえば、次の関数を定義します。

def my_formatter(x, pos):
    """Format 1 as 1, 0 as 0, and all values whose absolute values is between
    0 and 1 without the leading "0." (e.g., 0.7 is formatted as .7 and -0.4 is
    formatted as -.4)."""
    val_str = '{:g}'.format(x)
    if np.abs(x) > 0 and np.abs(x) < 1:
        return val_str.replace("0", "", 1)
    else:
        return val_str

これで、質問の majorFormatter majorFormatter = FuncFormatter(my_formatter)に置き換えることができます。

完全な例

Let's look at a 完全な例.

from matplotlib import pyplot as plt
from matplotlib.ticker import FuncFormatter
import numpy as np

def my_formatter(x, pos):
    """Format 1 as 1, 0 as 0, and all values whose absolute values is between
    0 and 1 without the leading "0." (e.g., 0.7 is formatted as .7 and -0.4 is
    formatted as -.4)."""
    val_str = '{:g}'.format(x)
    if np.abs(x) > 0 and np.abs(x) < 1:
        return val_str.replace("0", "", 1)
    else:
        return val_str

# Generate some data.
np.random.seed(1) # So you can reproduce these results.
vals = np.random.rand((1000))

# Set up the formatter.
major_formatter = FuncFormatter(my_formatter)

plt.hist(vals, bins=100)
ax = plt.subplot(111)
ax.xaxis.set_major_formatter(major_formatter)
plt.show()

このコードを実行すると、次のヒストグラムが生成されます。

Histogram with modified tick labels.

目盛りのラベルは、質問で要求された条件を満たすことに注意してください。

9
追加された

あなたのすべての値を10倍にします。

2
追加された