【问题标题】:How to format axes ticks to significant digits in matplotlib如何在matplotlib中将坐标轴刻度格式化为有效数字
【发布时间】:2021-02-01 21:35:36
【问题描述】:

我想知道 matplotlib 中是否有任何方法可以用有效数字控制轴刻度,而不是用小数位数控制。例如,以下数字:2, 15, 120 应写为 2.00, 15.0, 120

【问题讨论】:

  • 我认为如果像这样以不同程度的精度显示数字可能会引起一些混乱。某些数字显示 2 位小数 (2.00),而其他数字 (120) 没有小数显示,表明被测量的物体以不同程度的精度进行测量,可能使用不同的测量方法/工具。无论这背后的背景是什么,我相信在绘图中显示数据时,将数据四舍五入到相同的精度会更有意义。无论如何,这可以在 matplotlib 中完成,所以我在下面分享了一个答案。
  • @PatrickFitzGerald 谢谢。

标签: python matplotlib axes significant-digits xticks


【解决方案1】:

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

在以下示例中,格式说明符为{x:9<5.1f},其中9 是填充字符(而不是0,以便使示例更清晰),< 将数字左对齐,5 是通过将填充值添加到定点表示法f 的精度限制右侧.1 保持不变的字符数(数字 + 小数点)。

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 是使用定点符号 f 显示小数点时可以使用的最小精度(显示较小值的小数)。如果将精度更改为.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()

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 2014-03-22
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多