如何在 matplotlib 中将轴刻度格式化为有效数字

How to format axes ticks to significant digits in matplotlib

我想知道 matplotlib 中是否有任何方法可以控制具有有效数字的坐标轴刻度,而不是通过小数位数来控制。例如,下面的数字:2, 15, 120 应该写成 2.00, 15.0, 120

您可以通过定义 string format specifier 并将其应用于例如带有 ax.xaxis.set_major_formatter(format_specifier) 的 x 轴刻度标签来实现。

在下面的示例中,格式说明符是 {x:9<5.1f} 其中 9 是填充字符(而不是 0 以使示例更清楚), < 对齐数字左边,5是字符数(数字+小数点)通过在.1的精度限制右边加上填充值保持不变,对于定点表示法[=18] =].

import matplotlib.pyplot as plt    # v 3.3.2

x = [2, 15, 120]
y = [0, 0, 0]

fig, ax = plt.subplots(figsize=(8,4))
ax.scatter(x, y)
ax.set_xticks(x)

# Format tick labels by aligning values to the left and filling space beyond
# value precision with nines
ax.xaxis.set_major_formatter('{x:9<5.1f}')

title = 'x-axis values are shown with 4 digits by using the x-axis major formatter'
ax.set_title(title, pad=10)

plt.show()

可以看到,120后面有一个小数点和零,因为.1是用定点表示法显示小数点时可以使用的最小精度[=18] =](需要显示较小值的小数)。如果将精度更改为 .0,则值显示为整数后跟填充字符。

如果您想删除多余的零和小数点,可以通过从 x 刻度创建刻度标签来完成,如下例所示。和以前一样使用相同的值和相同的字符串格式说明符,但这次使用 0 作为填充值,然后进一步编辑格式化字符串:

fig, ax = plt.subplots(figsize=(8,4))
ax.scatter(x, y)
ax.set_xticks(x)

# Create tick labels by creating and formatting strings using a loop
labels = []
for tick in ax.get_xticks():
    label = f'{tick:0<5.1f}'
    labels.append(label[:-1].rstrip('.'))

# # Create tick labels using a list comprehension
# labels = [f'{tick:0<5.1f}'[:-1].rstrip('.') for tick in ax.get_xticks()]

ax.set_xticklabels(labels)

title = 'x-axis values are shown with 3 digits by creating tick labels from the x ticks'
ax.set_title(title, pad=10)

plt.show()