在对数刻度轴上格式化自定义标签

时间:2019-12-17 18:31:26

标签: python matplotlib

我正在使用matplot lib绘制一些曲线,并将x轴设置为对数比例。我想出了如何从set ticks with logarithmic scale设置自定义刻度线:

import matplotlib
from matplotlib import pyplot as plt


ax = plt.gca()
ax.set_xscale('log')
ax.set_xticks([0.001, 0.003, 0.010, 0.033, 0.10, 0.33, 1.0, 3.3, 10.0, 33.0, 100.0])
ax.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.get_xaxis().set_tick_params(which='minor', size=0, width=0)
plt.savefig('logscale.png')
plt.close()

此代码产生以下图:

enter image description here

如您所见,最左边的两个刻度是0.00,而不是应有的0.0010.003。如何格式化这些格式以在小数点后显示更多数字?

1 个答案:

答案 0 :(得分:2)

ScalarFormatter自动确定要显示的有效数字位数。这是最经常需要的。但是,ScalarFormatter并未进行优化以用于对数刻度。因此,在这种情况下将失败。

因为在这里,我们无论如何都不需要ScalarFormatter的很多功能,我们可以选择使用StrMethodFormatter。对于三位数,请使用例如

matplotlib.ticker.StrMethodFormatter("{x:1.3f}")