如何解决如何在 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()
如您所见,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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。