Python 3.x Matplotlib刻度标签精度

Python 3.x Matplotlib刻度标签精度,python-3.x,matplotlib,Python 3.x,Matplotlib,在定义记号标签时,我得到了异常高的精度。例如: import pylab as pl fig = pl.figure(figsize=(3.25, 2.5)) ax0 = fig.add_subplot(111) ax0.set_ylim([0, 0.5]) ax0.set_yticks(np.arange(0, 0.51, 0.1), minor=False) ax0.set_yticklabels(np.arange(0, 0.51, 0.1), fontsize=8) ax0.set

在定义记号标签时,我得到了异常高的精度。例如:

import pylab as pl

fig = pl.figure(figsize=(3.25, 2.5))
ax0 = fig.add_subplot(111)

ax0.set_ylim([0, 0.5])
ax0.set_yticks(np.arange(0, 0.51, 0.1), minor=False)
ax0.set_yticklabels(np.arange(0, 0.51, 0.1), fontsize=8)

ax0.set_xlim([0, 0.5])
ax0.set_xticks(np.arange(0, 0.51, 0.1), minor=False)
ax0.set_xticklabels(np.arange(0, 0.51, 0.1), fontsize=8)

fig.show()
下面是输出图,0.3标记(x轴和y轴)上有错误的记号标签。我尝试过使用np.linspace,这会产生同样的问题

我理解浮点精度的问题,但我希望标签能够更快地被舍入。如何更正此错误以仅显示第一个小数点

使用matplotlib 2.2.2

我今天正在努力解决这个问题,这是我目前的解决方案:

v1:

v2:


我不确定格式化程序应该在
设置\u xlim
之前还是之后,但这应该有效:)

如果您不手动设置刻度,则会自动正确标记刻度

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(3.25, 2.5))
ax0 = fig.add_subplot(111)

ax0.set_ylim([0, 0.5])
ax0.set_yticks(np.arange(0, 0.51, 0.1), minor=False)

ax0.set_xlim([0, 0.5])
ax0.set_xticks(np.arange(0, 0.51, 0.1), minor=False)


plt.show()

没错,但这只是一个说明问题的MWE。我实际上没有看到问题所在。如果您要求matplotlib在第四个勾号上标记
3.0000000000000 4
,它就会这样做。因此,解决方案当然不是要求它用
3.00000000000004
标记它。我以前从未使用过set\u major\u formatter…也许直到现在我才算幸运。我很惊讶我以前没有遇到过这个问题。您需要省去行
set\xticklabels
,否则它将用一个
FixedFormatter
覆盖
FormatterFormatter
,导致同样的问题。我的观点是要么你用
set\u major\u formatter
省去行,要么用
set\u xticklabels
省去行。不管最后发生什么,都会覆盖前一个。注意,我只是分享了我的实现,因为我失去了让它正常运行的想法,这就是成功的原因。现在我平静下来了,我能理解你所说的:)
ax0.set_xlim([0, 0.5])
ax0.set_xticks(np.round(np.arange(0, 0.51, 0.1),2), minor=False)
ax0.set_xticklabels(np.round(np.arange(0, 0.51, 0.1),2), fontsize=8)
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(3.25, 2.5))
ax0 = fig.add_subplot(111)

ax0.set_ylim([0, 0.5])
ax0.set_yticks(np.arange(0, 0.51, 0.1), minor=False)

ax0.set_xlim([0, 0.5])
ax0.set_xticks(np.arange(0, 0.51, 0.1), minor=False)


plt.show()