python - 如何在matplotlib中将坐标轴刻度格式化为有效数字
问题描述
我想知道 matplotlib 中是否有任何方法可以用有效数字控制轴刻度,而不是用小数位数控制。例如,以下数字:2、15、120应写为2.00、15.0、120
解决方案
您可以通过定义字符串格式说明符并将其应用到 x 轴刻度标签(例如,使用ax.xaxis.set_major_formatter(format_specifier)
.
在下面的示例中,格式说明符是{x:9<5.1f}
填充9
字符的位置(而不是 0,以便使示例更清晰),<
将数字左对齐,5
是通过添加保持不变的字符数(数字 + 小数点).1
定点表示法的精度限制右侧的填充值f
。
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()
推荐阅读
- ddev - 如何在 ddev 中使用 elasticsearch 附加容器/服务?
- java - 从 Outputstream 下载 PDF 文件
- php - 如何在一个 MySQL 查询中选择 2 个连接表?
- php - Yii2 gridview如何只获取一次相关模型以获得更多属性
- .htaccess - 如何使用 htaccess 文件将 URL 例如 (www.foobar2.com) 重定向到另一个 URL (www.foobar.com)
- google-cloud-platform - 更改 Cloud Composer 的 DAG 的默认 GCS 位置
- javascript - 在复选框单击事件中使用 preventDefault
- html - 基于其中的文本拉伸复杂的 SVG
- c# - 实体框架异常:没有为实体类型“CultureInfo”找到合适的构造函数
- jmeter - 如何为在 TeamCity 中运行的 JMeter 编写 JSON 模式验证