如何更改数字十进制数据的ticklabels为"0","0.1" (在0和1之间的说),在matplotlib" 0.2" ,而不是'0.0’,'0.1’,'0.2’?例如,
hist(rand(100))
xticks([0, .2, .4, .6, .8])
Run Code Online (Sandbox Code Playgroud)
将标签格式化为"0.0","0.2"等.我知道这摆脱了"0.0"中的前导"0"和"1.0"上的尾随"0":
from matplotlib.ticker import FormatStrFormatter
majorFormatter = FormatStrFormatter('%g')
myaxis.xaxis.set_major_formatter(majorFormatter)
Run Code Online (Sandbox Code Playgroud)
这是一个好的开始,但我也想摆脱"0.2"和"0.4"等的"0"前缀.如何做到这一点?
Dav*_*ber 10
虽然我不确定这是最好的方法,但你可以使用a 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
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用majorFormatter = FuncFormatter(my_formatter)
替换majorFormatter
问题.
让我们看一个完整的例子.
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()
Run Code Online (Sandbox Code Playgroud)
运行此代码会生成以下直方图.
请注意,刻度标签满足问题中要求的条件.
归档时间: |
|
查看次数: |
2543 次 |
最近记录: |