gpt4 book ai didi

python - 从 matplotlib 刻度标签格式中删除前导 0

转载 作者:太空狗 更新时间:2023-10-30 02:22:46 25 4
gpt4 key购买 nike

如何在 matplotlib 中将数字十进制数据(比如 0 和 1 之间)的刻度标签更改为“0”、“.1”、“.2”而不是“0.0”、“0.1”、“0.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”前缀。如何做到这一点?

最佳答案

虽然我不确定这是最好的方法,但您可以使用 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 = 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()

运行此代码会生成以下直方图。

Histogram with modified tick labels.

注意刻度标签满足问题中要求的条件。

关于python - 从 matplotlib 刻度标签格式中删除前导 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com