Matplotlib 刻度标签精度

8

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

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()

下面是带有错误刻度标签的输出图(x轴和y轴均为0.3)。 我尝试使用np.linspace,但仍然存在问题。 虽然我了解浮点精度的问题,但我希望标签能够更早地进行四舍五入。如何修正这个问题,只显示第一个小数? 使用matplotlib 2.2.2 Figure with bad labels.
2个回答

6

我今天一直在苦恼这个问题,以下是我的当前解决方案:

v1:

from matplotlib.ticker import FormatStrFormatter
ax0.set_xlim([0, 0.5])
ax0.set_xticks(np.arange(0, 0.51, 0.1), minor=False)
ax0.xaxis.set_major_formatter(FormatStrFormatter('%0.1f'))

v2:

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)

我不确定格式化程序是在set_xlim之前还是之后,但这应该可以解决问题 :)


我以前从未使用过set_major_formatter...也许我一直很幸运,直到现在。我很惊讶我以前没有遇到过这个问题。 - tnknepp
你需要删除set_xticklabels这一行,否则它会用FixedFormatter覆盖FormatStrFormatter,导致相同的问题。 - ImportanceOfBeingErnest
我的意思是你要么省略带有 set_major_formatter 的那一行,要么省略带有 set_xticklabels 的那一行。无论哪个最后执行,都会覆盖之前的操作。 - ImportanceOfBeingErnest
注意,我只是分享了我的实现,因为我已经疯狂地尝试让它正常工作,而这就是有效的方法。现在我冷静下来了,我可以理解你提到的内容 :) - Yuca

0

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

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()

enter image description here


你的回答完全没有关联。 - Ash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接