如何在 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,以使示例更清晰),< 将数字与left,5 是通过在定点表示法 .1 的精度限制 f 的右侧添加填充值而保持不变的字符数(数字 + 小数点) .

import matplotlib.pyplot as plt    # v 3.3.2

x = [2,15,120]
y = [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()

xaxis_format_specifier

如您所见,120 后面有一个小数点和零,因为 .1 是使用定点符号 f 显示小数点时可以使用的最小精度(需要显示较小值的小数)。如果将精度更改为 .0,则值将显示为整数,后跟填充字符。

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

fig,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()

xaxis_format_labels_from_ticks

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...